Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nginx作为NodeJS的代理+;socket.io:客户端未接收通知_Node.js_Nginx_Websocket_Socket.io - Fatal编程技术网

Node.js nginx作为NodeJS的代理+;socket.io:客户端未接收通知

Node.js nginx作为NodeJS的代理+;socket.io:客户端未接收通知,node.js,nginx,websocket,socket.io,Node.js,Nginx,Websocket,Socket.io,我已将nginx配置为代理WebSocket,如下所示: location /socket.io { proxy_pass http://localhost:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } 客户端连接正常,但当服务器发出通知时: io.sockets.emit("update",data); 客户从未收到

我已将nginx配置为代理WebSocket,如下所示:

location /socket.io {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

客户端连接正常,但当服务器发出通知时:

io.sockets.emit("update",data);
客户从未收到:

var socket = io.connect("http://" + hostip + "/socket.io");
socket.on("update",function(data)
{
  console.log("got update: " + data);
});
如果我绕过nginx,一切正常:

var socket = io.connect("http://" + hostip + ":8000");
socket.on("update",function(data)
{
  console.log("got update: " + data);
});

我错过了什么?顺便说一句,为什么绕过nginx不是违反单一来源策略?谢谢。

尝试一下
var socket=io.connect(location.host)”。我认为您不需要
/socket.io
路径。

是的,我正在运行nginx 1.4.1。我的代码与您的链接答案相同。客户机连接良好,服务器将调试记录到控制台,记录客户机的心跳,它在发出“更新”时记录,但客户机从未收到。路径中的/socket.io是一个虚拟位置,由nginx按照配置映射到localhost:8000。是的,我知道,但socket.io硬编码了该路径。只需连接到根目录,socket.io将自动访问URL,如
/socket.io/1/websocket/FDzfeZaDH_tuk7bulcz5
。谢谢Peter,这解决了问题。我希望能澄清一下。如您所述,io.connect()调用似乎在向url添加/socket.io,这解释了为什么nginx会将其正确路由到我的socket.io服务器。因此,当我在url中有/socket.io时,io.connect()会生成与location.host相同的GET url,为什么不起作用呢?我感激地跪在你的脚下!终于,我的配置完成了!