1

「/ api」で始まるリクエストをそのポートに渡すように構成されたnginxを備えたシステムのポート5000で実行されている「xhr-polling」トランスポートのみを使用するsocket.ioサーバーがあります。

私のクライアントでは、接続時に socket.io リソースを 'api/socket.io' として指定します。これにより、最初の接続要求がサーバーに正しく転送され、接続イベントがトリガーされるように見えます。ただし、 を使用してサーバーから送信された応答socket.emitはクライアントに到達しません。

クライアントをポート 5000 に直接接続し、'resource' オプションをオフのままにし、nginx 転送をバイパスすると、すべて正常に動作するように見えます。

サーバ:

var io = require('socket.io').listen(5000, {transports: ['xhr-polling']});

io.sockets.on('connection', function (socket) {
   console.log('Connection spotted!');
   socket.emit('connected', 'hi');
});

クライアント (動作していません):

var socket = io.connect(window.location.hostname, {resource:'api/socket.io'});
socket.on('connected', function(data) {
    alert('Connected!!!');
});

クライアント (作業中):

var socket = io.connect(window.location.hostname, {port: 5000});
socket.on('connected', function(data) {
    alert('Connected!!!');
});

nginx:

location / {
    proxy_pass http://localhost:5000/;
}

どちらの場合も、「接続が見つかりました!」と表示されます。サーバーにメッセージをログに記録しますが、クライアントはポートに直接接続するとデータとアラートを取得します。

4

0 に答える 0