用这个撕掉我的头发......有没有人设法将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) 在print()
由Docker Compose管理的Docker容器中运行的Python应用程序中使用语句时,仅sys.stderr
记录输出。print()
没有看到Vanilla 语句,因此:
print("Hello? Anyone there?")
Run Code Online (Sandbox Code Playgroud)
...永远不会出现在常规日志中:
(您可以在我的应用中看到其他库显式打印的其他日志,但没有我自己的调用。)
如何避免我的print()
电话被忽略?
我尝试在新的亚马逊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) 我已经编写PHP多年了,并且已经在阳光下使用了每个框架,但是有一件事总是让我感到烦恼......那就是每当有人告诉我的服务器他们想要的时候,整个血腥的东西都必须被解释和执行页面服务.
我已经尝试过缓存,FastCGI,Zend作业队列(和类似的symfony插件 - 以及我自己的基于数据库的解决方案,实现System_Daemon类来运行后台进程)我已经设法让我的应用程序相当快速地使用所有这些东西......但是我无法克服我的设置文件,系统/环境检查功能以及所有应该只加载ONCE的所有东西的心理块...加载每个人的时间某人点击我的页面.
所以,我的漫步导致以下Q--
是否有一些方法/技术将PHP的某些方面加载到RAM中,以便在请求该页面时,所有我的settings.yml文件,系统检查,框架文件,缓存页面等都可以直接从内存加载而无需触及HD ...或者需要每天进行50,000次相同的加载机制来启动程序?
如果PHP中没有任何内容......是否有其他可以通过这种方式编译的"网络"语言,以允许真正的init-once应用程序?
在使用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)
......然后一切正常.
我怎样才能让这两个人玩得很好?即保持缓存并添加自定义过滤器?
谢谢!
我正在编写一个节点应用程序,允许用户执行任意javascript代码 - 一种超出常规UI的"内部API"/业务流程.
我正在寻找一个提供以下功能的沙箱环境:
单独执行而不会产生一个全新的线程 - 这将由成千上万的用户运行,我更喜欢坚持使用无法访问父调用堆栈的匿名函数...或者......如果是线程.. .跨多个服务器生成的能力.
语法检查会抛出parse/exec错误的异常而导致整个应用程序崩溃.
禁用函数/ var访问的能力.我试图阻止访问Node的I/O ...因此用户无法将其转换为DoS脚本或读取/ etc/passwd,但可以运行任何本机语法和预先批准的函数列表.
超时控制......因此执行上限可以适用于 while(true) do_intensive_stuff();
等等.
想到任何明显的选择?
不确定这是否是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) 我在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
咦?
不确定这是 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 ×4
node.js ×3
php ×2
v8 ×2
amazon-ami ×1
amazon-ec2 ×1
apollo ×1
caching ×1
daemon ×1
docker ×1
nginx ×1
node-redis ×1
python ×1
react-router ×1
redis ×1
safari ×1
sandbox ×1
silex ×1
socket.io ×1
symfony ×1
symfony1 ×1
twig ×1
typescript ×1
yum ×1