小编Lee*_*son的帖子

使用集群将Socket.IO扩展到多个Node.js进程

用这个撕掉我的头发......有没有人设法将Socket.IO扩展到由Node.js的集群模块产生的多个"工人"进程?

假设我有四个工作进程(伪):

// on the server
var express = require('express');
var server = express();
var socket = require('socket.io');
var io = socket.listen(server);

// socket.io
io.set('store', new socket.RedisStore);

// set-up connections...
io.sockets.on('connection', function(socket) {

  socket.on('join', function(rooms) {
    rooms.forEach(function(room) {
      socket.join(room);
    });
  });

  socket.on('leave', function(rooms) {
    rooms.forEach(function(room) {
      socket.leave(room);
    });
  });

});

// Emit a message every second
function send() {
  io.sockets.in('room').emit('data', 'howdy');
}

setInterval(send, 1000);
Run Code Online (Sandbox Code Playgroud)

在浏览器上......

// on the client
socket = io.connect(); …
Run Code Online (Sandbox Code Playgroud)

javascript redis node.js socket.io node-redis

60
推荐指数
1
解决办法
4万
查看次数

docker-compose在Python应用程序中不打印标准输出

print()由Docker Compose管理的Docker容器中运行的Python应用程序中使用语句时,仅sys.stderr记录输出。print()没有看到Vanilla 语句,因此:

print("Hello? Anyone there?")
Run Code Online (Sandbox Code Playgroud)

...永远不会出现在常规日志中:

在此处输入图片说明

(您可以在我的应用中看到其他库显式打印的其他日志,但没有我自己的调用。)

如何避免我的print()电话被忽略?

python docker docker-compose

21
推荐指数
3
解决办法
7090
查看次数

如何在amazon linux disto上安装nginx 1.9.15

我尝试在新的亚马逊linux上安装最新版本的nginx(> = 1.9.5)来使用http2.我按照这里描述的说明进行操作 - > http://nginx.org/en/linux_packages.html

我创建了一个/etc/yum.repos.d/nginx.repo包含此内容的repo文件:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
Run Code Online (Sandbox Code Playgroud)

如果我跑yum update,yum install nginx我得到这个:

nginx x86_64 1:1.8.1-1.26.amzn1 amzn-main 557 k

似乎它仍然来自amzn-main回购.如何安装较新版本的nginx?

- 编辑 - 我在nginx.repo文件中添加了"priority = 10",现在我可以yum install nginx用这个结果安装1.9.15 :

Loaded plugins: priorities, update-motd, upgrade-helper
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 1:1.9.15-1.el7.ngx will be installed
--> Processing Dependency: systemd for package: 1:nginx-1.9.15-1.el7.ngx.x86_64
--> Processing Dependency: libpcre.so.1()(64bit) for package: 1:nginx-1.9.15-1.el7.ngx.x86_64
--> Finished Dependency Resolution
Error: Package: 1:nginx-1.9.15-1.el7.ngx.x86_64 …
Run Code Online (Sandbox Code Playgroud)

nginx yum amazon-ec2 amazon-web-services amazon-ami

14
推荐指数
2
解决办法
2万
查看次数

认真加快PHP?

我已经编写PHP多年了,并且已经在阳光下使用了每个框架,但是有一件事总是让我感到烦恼......那就是每当有人告诉我的服务器他们想要的时候,整个血腥的东西都必须被解释和执行页面服务.

我已经尝试过缓存,FastCGI,Zend作业队列(和类似的symfony插件 - 以及我自己的基于数据库的解决方案,实现System_Daemon类来运行后台进程)我已经设法让我的应用程序相当快速地使用所有这些东西......但是我无法克服我的设置文件,系统/环境检查功能以及所有应该只加载ONCE的所有东西的心理块...加载每个人的时间某人点击我的页面.

所以,我的漫步导致以下Q--

是否有一些方法/技术将PHP的某些方面加载到RAM中,以便在请求该页面时,所有我的settings.yml文件,系统检查,框架文件,缓存页面等都可以直接从内存加载而无需触及HD ...或者需要每天进行50,000次相同的加载机制来启动程序?

如果PHP中没有任何内容......是否有其他可以通过这种方式编译的"网络"语言,以允许真正的init-once应用程序?

php compiler-construction symfony1 daemon

8
推荐指数
2
解决办法
787
查看次数

使用Silex的Twig addFilter?

在使用Silex时将自定义过滤器连接到Twig的正确方法是什么,但保持现有的twig.options完整?

这就是我的意思.我有以下代码:

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => dirname(__FILE__).'/view',
    'twig.class_path' => dirname(__FILE__).'/vendor/twig/lib',
    'twig.options' => array('cache'=>'folder/twig')
));

function test() {
    return 'yay';
}

$app['twig']->addFilter('test',new \Twig_Filter_Function('test'));
Run Code Online (Sandbox Code Playgroud)

如果我按原样运行该代码,则过滤器不起作用.

相反,Twig返回PREVIOUS REQUEST的无限缓存版本(即使我清除缓存内容 - 我猜这是因为缓存存储在别处,因为我正在覆盖twig.options......不确定).

但是,如果我抛弃以下行:

'twig.options' => array('cache'=>'folder/twig')
Run Code Online (Sandbox Code Playgroud)

......然后一切正常.

我怎样才能让这两个人玩得很好?即保持缓存并添加自定义过滤器?

谢谢!

php caching symfony twig silex

7
推荐指数
1
解决办法
4450
查看次数

嵌入式节点/ javascript沙箱?

我正在编写一个节点应用程序,允许用户执行任意javascript代码 - 一种超出常规UI的"内部API"/业务流程.

我正在寻找一个提供以下功能的沙箱环境:

  • 单独执行而不会产生一个全新的线程 - 这将由成千上万的用户运行,我更喜欢坚持使用无法访问父调用堆栈的匿名函数...或者......如果是线程.. .跨多个服务器生成的能力.

  • 语法检查会抛出parse/exec错误的异常而导致整个应用程序崩溃.

  • 禁用函数/ var访问的能力.我试图阻止访问Node的I/O ...因此用户无法将其转换为DoS脚本或读取/ etc/passwd,但可以运行任何本机语法和预先批准的函数列表.

  • 超时控制......因此执行上限可以适用于 while(true) do_intensive_stuff();等等.

想到任何明显的选择?

javascript v8 sandbox node.js

5
推荐指数
1
解决办法
1549
查看次数

打字稿:允许跨多个文件的重复变量?

不确定这是否是Typescript(2.1.5)或预期行为中的错误,但如果我有两个文件在同一文件夹中声明相同的块级var:

a.js

let x = 0;
Run Code Online (Sandbox Code Playgroud)

b.js

let x = 1;
Run Code Online (Sandbox Code Playgroud)

...并建立它tsc,我得到:

a.ts(1,5):错误TS2451:无法重新声明块范围变量'x'.

b.ts(1,5):错误TS2451:无法重新声明块范围变量'x'.

这应该发生吗?或者,Typescript是否具有"默认"命名空间的概念,在整个项目中共享?

我原本以为这可能与声明合并有关,但是使用显式命名空间的等价似乎工作得很好:

c.js

namespace Test {
    let x = 0;
}

namespace Test {
    let x = 1;
}
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
506
查看次数

Node.js - Chrome和Safari中的两个连接?

我在Node.js中尝试这个基本的Javascript代码:

var count=1;
var net = require('http');
net.createServer(function(req,res){
    res.writeHead(200,{'Content-Type':'text/plain'});
    res.end((count+=1).toString());
}).listen(3000,"127.0.0.1");
Run Code Online (Sandbox Code Playgroud)

预期结果:每次浏览器命中都会将计数输出增加1.

实际结果: Firefox增加1(预期)... Safari + Chrome增量为2

咦?

javascript safari google-chrome v8 node.js

4
推荐指数
1
解决办法
614
查看次数

Apollo + React Router 4 SSR 问题

不确定这是 React Router v4、React Apollo 客户端还是我的实现的问题。

但是<ApolloProvider>作为顶级 HOC,即:

const ComponentsWithData = await getDataFromTree(
  <ApolloProvider client={apolloClient}>
    <StaticRouter location={ctx.request.url} context={route}>
      <App />
    </StaticRouter>,
  </ApolloProvider>,
);

const html = ReactDOMServer.renderToString(ComponentsWithData);
Run Code Online (Sandbox Code Playgroud)

......我明白了:

警告:无法丙类型:无效支柱children型的array供给ApolloProvider,预期单个ReactElement。在 ApolloProvider 错误 React.Children.only 期望接收单个 React 元素子元素。

并翻转过来,以 React Router<StaticRouter>为顶部,即:

const ComponentsWithData = await getDataFromTree(
  <ApolloProvider client={apolloClient}>
    <StaticRouter location={ctx.request.url} context={route}>
      <App />
    </StaticRouter>,
  </ApolloProvider>,
);
Run Code Online (Sandbox Code Playgroud)

...然后我得到:

A<Router>可能只有一个子元素

渲染在浏览器中工作正常(使用 React Router 的<BrowserRouter>),但在服务器上失败。

由于在 React 层次结构之外进行所有路由匹配,而不是在其内部进行声明,因此它在 React Router …

javascript apollo react-router

1
推荐指数
1
解决办法
1085
查看次数