我有一個很好的工作django網站,由gunicorn和nginx(作爲代理服務器)服務,現在我想在該網站中使用socket.io和nodejs添加聊天機制。問題是,當我將socketio直接連接到nodejs服務器(它正在偵聽端口5000)時,聊天工作完全正常,但是當我嘗試使用nginx將socketio請求代理到nodejs時,它不起作用。Socket.io不能與nginx一起工作
這是我nginx的文件/網站啓用/ DIR
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錯誤? – robertklep
我沒有看到任何錯誤。該網站正常運作。在console.log(瀏覽器)中沒有錯誤,並且在成功的客戶端 - 服務器連接之後,我可以看到nodejs服務器的輸出和'pm2 logs app_name',因此建立了連接。有沒有其他地方可以找到錯誤? – atx
客戶端 - 服務器連接成功,但消息沒有傳送到其他客戶端。 – atx