Socket.io not working with nginx



我有一个运行良好的django网站,由gunicorn和nginx(作为代理服务器(提供服务,现在我想使用 socket.io 和nodejs在该网站中添加聊天机制。问题是当我将socketio直接连接到nodejs服务器(正在端口5000上侦听(时,聊天工作得很好,但是当我尝试使用nginx将socketio请求代理到nodejs时,它不起作用。

这是我在/sites-enabled/dir 中的 nginx 文件

server {
    listen 80;
    server_name 127.0.0.1;
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }
    location /static/ {
        root /path/to/static;
    }
    location / {
        include proxy_params;
        proxy_pass http://unix:/path/to/file.sock;
    }
    location /socket.io/ {
        proxy_pass http://127.0.0.1:5000;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

顺便说一句,我正在使用 pm2 来管理 nodejs(如果它有任何区别(。

编辑:

server.js:

var io = require('socket.io').listen(5000);
var fs = require('fs');
io.on('connection', function(socket){
    console.log('connected');

    socket.on('question', function(data){
        console.log(data);
        soc.emit('question', data);
    });
    socket.on('advice', function(data){
        console.log(data);
        soc.emit('advice', data);
    });
    socket.on('disconnect', function(){ 
        console.log('disconnected');
    });
});


client.js
var socket  = io('http://127.0.0.1/socket.io/');

socket.on('question', function(data){
    console.log(data);
});

socket.on('advice', function(data){
    console.log(data);
});
$('#send').click(function() {
    var msg     = $('#msg').val();
    if (msg == '') {$('#msg').focus();}
    else{
        data = {msg:msg};
        socket.emit('question', data);
        var msg = $('#msg').val('').focus();
    }  
});

用于客户端的 URL 不正确:

var socket = io('http://127.0.0.1/socket.io/');

添加路径(在本例中为 /socket.io/ (在连接字符串中具有特殊含义:它反映您希望客户端连接到的命名空间。

由于您没有使用命名空间,因此应将其关闭:

var socket = io('http://127.0.0.1/');
// Or possibly even just this:
// var socket = io();

最新更新