web-dev-qa-db-ja.com

サブディレクトリに対してsocket.ioを実行するにはどうすればよいですか

/mysubdirを使用するパスに対してnode.jsサーバーにのみヒットするプロキシを実行しています。この状況に合わせてsocket.ioを構成するにはどうすればよいですか?

私のクライアントコードで私は試しました:

var socket = io.connect('http://www.example.com/mysubdir');

しかし、基になるsocket.io(またはengine.io)のhttpリクエストがヒットしていることに気付きました

http://www.example.com/socket.io/?EIO=3&transport=polling&t=1410972713498-72`

叩いて欲しい

http://www.example.com/mysubdir/socket.io.....

クライアントとサーバーで構成する必要があるものはありますか?

18
Drew LeSueur

私のサーバーでは私はしなければなりませんでした

var io = require('socket.io')(httpServer, {path: '/mysubdir/socket.io'})`

私のクライアントでは私はしなければなりませんでした

<script src="http://www.example.com/mysubdir/socket.io/socket.io.js"></script>

そしてまた

var socket = io.connect('http://www.example.com', {path: "/mysubdir/socket.io"});`
23
Drew LeSueur

私の場合、リバースプロキシとしてnginxを使用しています。ポーリング時に404エラーが発生していました。これが私にとっての解決策でした。

ノードサーバーへのURLは https://example.com/subdir/

App.jsで、ioサーバーをインスタンス化しました。

var io = require('socket.io')(http, {path: '/subdir/socket.io'});

私が使用したhtmlで

socket = io.connect('https://example.com/subdir/', {
    path: "/subdir"
});

乾杯、
ルーク。

3
Luke M

@ Drew-LeSueur による答えは、socket.io> = 1.0に対して正しいです。

Socket.io 0.9を使用していたので、ドキュメントに 古い方法 が見つかりました。

// in 0.9
var socket = io.connect('localhost:3000', {
  'resource': 'path/to/socket.io';
});

// in 1.0
var socket = io.connect('localhost:3000', {
  'path': '/path/to/socket.io';
});

/が新しいpathオプションの最初の文字として表示されることに注意してください。

2
yves amsellem

Nginxを使用すると、これは、socket.ioサーバーアプリで何も変更する必要のないソリューションです。

Nginx confで:

location /mysubdir {
   rewrite ^/mysubdir/(.*) /socket.io/$1 break;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_http_version 1.1;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $Host;
   proxy_pass http://127.0.1.1:3000;
}

サーバー内:

var io = require('socket.io')(3000)

クライアントの場合:

var socket = io.connect('https://example.com/', {
    path: "/mysubdir"
})
1