2017-05-18 4 views
1

J'ai un site Web django fonctionnant bien qui est servi par gunicorn et nginx (comme serveur proxy), maintenant je veux ajouter le mécanisme de causerie dans ce site Web using socket.io et nodejs. Le problème est que le chat marche parfaitement bien quand je connecte socketio directement au serveur nodejs (qui écoute sur le port 5000) mais quand j'essaye d'utiliser nginx pour envoyer la requête socketio à nodejs cela ne fonctionne pas.Socket.io ne fonctionne pas avec nginx

Voici mon fichier nginx dans/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 J'utilise PM2 pour gérer nodejs (si cela fait une différence).

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

Pouvez-vous définir _ « il ne fonctionne pas » _? Erreurs HTTP? JS erreurs? – robertklep

+0

Je ne vois aucune erreur. Le site fonctionne normalement. Pas d'erreur dans console.log (navigateur) et je peux voir la sortie du serveur nodejs avec 'pm2 logs app_name' après une connexion client-serveur réussie, donc la connexion est établie. Y a-t-il un autre endroit où je peux trouver des erreurs? – atx

+0

La connexion client-serveur est réussie mais les messages ne sont pas transmis à d'autres clients. – atx

Répondre

0

L'URL que vous utilisez pour le client est incorrect:

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

Ajout d'un chemin (dans ce cas, /socket.io/) a une signification particulière dans les chaînes de connexion : il reflète le namespace auquel vous souhaitez que le client se connecte.

Puisque vous ne l'utilisez namespaces, vous devez laisser au large:

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

Merci beaucoup. Tu as sauvé ma journée! – atx