为nginx反向代理路径设置socket.io客户端'资源'(没有websockets)

时间:2013-11-12 20:10:17

标签: node.js nginx socket.io

我有一个socket.io服务器,只使用在端口5000上运行的'xhr-polling'传输,在nginx系统配置为将以'/ api'开头的请求传递给该端口。

在我的客户端,在connect上,我将socket.io资源指定为'api / socket.io',它似乎正确地将初始连接请求转发到服务器并触发连接事件。但是,使用socket.emit从服务器发送的响应无法到达客户端。

如果我将客户端直接连接到端口5000,请不要使用'resource'选项,并绕过nginx转发,一切似乎都正常。

服务器:

var io = require('socket.io').listen(5000, {transports: ['xhr-polling']});

io.sockets.on('connection', function (socket) {
   console.log('Connection spotted!');
   socket.emit('connected', 'hi');
});

客户(不工作):

var socket = io.connect(window.location.hostname, {resource:'api/socket.io'});
socket.on('connected', function(data) {
    alert('Connected!!!');
});

客户(工作):

var socket = io.connect(window.location.hostname, {port: 5000});
socket.on('connected', function(data) {
    alert('Connected!!!');
});

nginx的:

location / {
    proxy_pass http://localhost:5000/;
}

在这两种情况下,我都看到“发现了连接!”服务器上的日志消息,但客户端在直接连接到端口时获取数据和警报。

0 个答案:

没有答案