2017-05-18 24 views
1

gunicornとnginx(プロキシサーバーとして)がサービスしているdjangoのうまく機能しているWebサイトを持っています。ここでsocket.ioとnodejsを使用してそのWebサイトにチャットメカニズムを追加します。問題は、ソケット5000をlistenしているnodejsサーバーにsocketioを直接接続するとチャットが正常に動作するが、nodejにsocketio要求をプロキシするためにnginxを使用しようとすると動作しないということです。ここで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"; 
    } 
} 

ところで私は(それはどんな違いがあれば)nodejsを管理するために、PM2を使用しています。

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

あなたは「それは動作しません」_ _定義することができますか? HTTPエラー? JSエラー? – robertklep

+0

私は間違いをしていません。ウェブサイトは正常に機能しています。 console.log(ブラウザ)にエラーはありません。クライアントとサーバーの接続が成功した後、pmj 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

関連する問題