【发布时间】:2017-10-17 18:45:55
【问题描述】:
我有一个运行良好的 django 网站,由 gunicorn 和 nginx(作为代理服务器)提供服务,现在我想使用 socket.io 和 nodejs 在该网站中添加聊天机制。问题是,当我将 socketio 直接连接到 nodejs 服务器(正在侦听端口 5000)时,聊天工作得非常好,但是当我尝试使用 nginx 将 socketio 请求代理到 nodejs 时,它不起作用。
这是我在 /sites-enabled/ 目录中的 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();
}
});
【问题讨论】:
-
你能定义“它不起作用”吗? HTTP错误? JS 错误?
-
我没有看到任何错误。该网站正常运行。 console.log(browser) 中没有错误,并且在客户端-服务器连接成功后,我可以看到带有“pm2 logs app_name”的nodejs服务器的输出,因此建立了连接。还有其他地方可以找到错误吗?
-
客户端-服务器连接成功,但消息没有传输到其他客户端。
-
Node服务器是否收到客户端发来的消息?您还可以在调试模式下启动 Node 服务器,以便记录更多信息:
env DEBUG=* node server.js(或 Windows 等效项) -
不,连接成功,但是节点服务器没有收到消息。
标签: node.js nginx socket.io gunicorn pm2