有没有人知道某种方式或者认为可以将Node.js与Nginx http推送模块连接起来,以维持客户端和浏览器之间的持久连接。
我是彗星的新手,所以只是不明白出版等,也许有人可以帮助我。
到目前为止我所建立的是以下内容。我下载了jQuery.comet插件并设置了以下基本代码:
客户端JavaScript
<script type="text/javascript">
function updateFeed(data) {
$('#time').text(data);
}
function catchAll(data, type) {
console.log(data);
console.log(type);
}
$.comet.connect('/broadcast/sub?channel=getIt');
$.comet.bind(updateFeed, 'feed');
$.comet.bind(catchAll);
$('#kill-button').click(function() {
$.comet.unbind(updateFeed, 'feed');
});
</script>
我能从中理解的是,客户端将继续收听/ broadcast / sub = getIt后面的url。当有消息时,它将触发updateFeed。
相当基本且易于理解的IMO。
Nginx http推送模块配置
default_type application / octet-stream; sendfile on; keepalive_timeout 65; push_authorized_channels_only off;
server {
listen 80;
location /broadcast {
location = /broadcast/sub {
set $push_channel_id $arg_channel;
push_subscriber;
push_subscriber_concurrency broadcast;
push_channel_group broadcast;
}
location = /broadcast/pub {
set $push_channel_id $arg_channel;
push_publisher;
push_min_message_buffer_length 5;
push_max_message_buffer_length 20;
push_message_timeout 5s;
push_channel_group broadcast;
}
}
}
好的,现在这告诉nginx在端口80监听对/ broadcast / sub的任何调用,它会回复发送给/ broadcast / pub的任何响应。
非常基本。这部分并不难理解,并且在互联网上有很好的记录。大多数情况下,背后都有一个红宝石或一个php文件进行广播。
我的想法是让node.js广播
/broadcast/pub
。我想这会让我从服务器到客户端persistent streaming data
而不会断开连接。我尝试了循环请求的长轮询方法,但我认为这会更有效。
或者这不起作用。
Node.js文件
现在创建Node.js我迷路了。首先,我不知道如何让node.js以这种方式工作。
我用于长轮询的设置如下:
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(new Date());
res.close();
seTimeout('',1000);
}).listen(8000);
这会侦听端口8000并只写入响应变量。
对于长时间轮询,我的nginx.config
看起来像这样:
server {
listen 80;
server_name _;
location / {
proxy_pass http://mydomain.com:8080$request_uri;
include /etc/nginx/proxy.conf;
}
}
这只是将端口80重定向到8000,这很好。
有没有人知道如何让Node.js以Comet理解的方式行事。会非常好,你会帮助我很多。
使用的
要使用faye我必须安装彗星客户端,但我想使用Nginx提供的那个。这就是为什么我不只是使用faye。 nginx使用的那个更加优化。
额外
答案 0 :(得分:2)
在your link看来,我觉得所有的pub / sub工作都是由Nginx完成的,Ruby代码只用于测试和发送消息。客户仍在使用长轮询:
在上面的脚本中,发布者每五秒向我们的Nginx服务器发送一个新事件,然后将数据推送给两个订户,这些订户打开了长轮询连接并等待数据。一旦消息发送给每个订阅者,Nginx关闭他们的连接,然后客户端立即重新建立以等待下一个可用消息。
Nginx作为消息的简单重传器(非常聪明的设置BTW,感谢链接)。
简而言之:浏览器不能用于您尝试的此类连接。这就是WebSockets的发明。
稍后我将在Node.js中创建一些代码,以便在Nginx中使用此设置(我也对它感兴趣)。