2017-05-18 10 views
1

Ich habe eine gut funktionierende Django-Website, die von Gunicorn und Nginx (als Proxy-Server) bedient wird, jetzt möchte ich Chat-Mechanismus in dieser Website mit socket.io und Nodejs hinzufügen. Das Problem ist, dass der Chat einwandfrei funktioniert, wenn ich socketio direkt mit dem Nodejs-Server verbinde (der Port 5000 überwacht), aber wenn ich nginx benutze, um die SocketIO-Anfrage an Nodejs zu beantworten, funktioniert es nicht.Socket.io funktioniert nicht mit Nginx

Hier ist meine nginx-Datei in/sites-enabled/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"; 
    } 
} 

BTW Ich bin mit PM2 NodeJS zu verwalten (wenn es einen Unterschied macht).

EDIT:

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(); 
    } 
}); 
+0

Können Sie definieren _ „es nicht funktioniert“ _? HTTP-Fehler? JS Fehler? – robertklep

+0

Ich sehe keine Fehler. Die Website funktioniert wie gewohnt. Keine Fehler in console.log (Browser) und ich kann die Ausgabe von Nodejs Server mit 'PM2 logs app_name' nach erfolgreicher Client-Server-Verbindung sehen, so dass die Verbindung hergestellt wird. Gibt es einen anderen Ort, an dem ich Fehler finden kann? – atx

+0

Die Client-Server-Verbindung ist erfolgreich, aber die Nachrichten werden nicht an andere Clients übertragen. – atx

Antwort

0

Die URL, die Sie für den Client verwenden ist falsch:

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

einen Pfad hinzufügen (in diesem Fall /socket.io/) hat eine besondere Bedeutung in Verbindung Strings : Es spiegelt die namespace wider, zu der der Client eine Verbindung herstellen soll.

Da Sie nicht Namespaces verwenden, sollten Sie es weglassen:

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

Vielen Dank. Du hast meinen Tag gerettet! – atx