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