2017-05-18 8 views
1

저는 gunicorn과 nginx (프록시 서버)가 제공하는 멋지게 작동하는 django 웹 사이트를 가지고 있습니다. 이제 socket.io와 nodejs를 사용하여 해당 웹 사이트에 채팅 메커니즘을 추가하고 싶습니다. 문제는 채팅을 완벽하게 잘 node5 서버 (포트 5000에서 듣고있다)에 직접 연결할 때 nginx 프록시 nodejs에 socketio 요청을 사용하려고 할 때 작동하지 않습니다.Socket.io가 nginx와 작동하지 않습니다.

여기에/사이트를 기반으로/내 nginx를 파일입니다 DIR BTW 나는 (그것이 어떤 차이가있는 경우) nodejs를 관리 할 수 ​​PM2를 사용하고

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"; 
    } 
} 

.

편집 :

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

가 정의 할 수있는 _ "가 작동하지 않습니다"_? HTTP 오류? JS 오류? – robertklep

+0

오류가 표시되지 않습니다. 웹 사이트가 정상적으로 작동합니다. console.log (브라우저)에 오류가 없으며 성공적인 클라이언트 - 서버 연결 후에 'pm2 logs app_name'을 사용하여 nodejs 서버의 출력을 볼 수 있으므로 연결이 설정됩니다. 다른 곳에서 오류를 찾을 수 있습니까? – atx

+0

클라이언트 - 서버 연결은 성공적이지만 메시지가 다른 클라이언트로 전송되지 않습니다. – atx

답변

0

클라이언트를 위해 사용중인 URL이 잘못되었습니다 :

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

은 (/socket.io/이 경우) 연결 문자열에서 특별한 의미가있는 경로를 추가 : 클라이언트에 연결하려는 namespace을 반영합니다. 당신이 네임 스페이스를 사용하지 않는 때문에

, 당신은을 떠나야한다 :

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

정말 고마워요. 너는 나의 하루를 구했다! – atx