node-http-proxy を使用して、ルーティング リクエスト用のリバース プロキシをセットアップしました。
var httpProxy = require('http-proxy');
var server = httpProxy.createServer({
hostnameOnly: true,
router: {
'www.example.com': 'localhost:3002'
}
}).listen(80);
ここで、 http://socket.io/#how-to-useで最初の例を実行すると、ソケットがクライアントに接続しないことがあります。これをテストするために、server.js と index.html という 2 つのファイルを作成しました。node アプリケーションを開始するには、server.js を実行します。
サーバー.js:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(3002);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
console.log("Socket connected");
});
index.html:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
setInterval(function() {
console.log(socket.socket.connected);
}, 1000)
</script>
クライアントが接続しない場合、ソケットがサーバーに接続した後、次の出力が +/- 10 秒間隔で繰り返し表示されます。
debug - setting request GET /socket.io/1/xhr-polling/Cqcw5xUjQ-B-Hw3FGF7Y?t=1385128607702
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client Cqcw5xUjQ-B-Hw3FGF7Y
ここで、ブラウザーを数回更新すると、ソケットは常にサーバーに接続します (つまり、常に"Socket connected"をログに記録します) が、クライアント側に接続しない場合があります。インデックスを更新した後、"false"console.log(socket.socket.connected)
を繰り返し出力することがあります。 html であり、別のページの更新後、ソケットがクライアントに接続しなかった、または接続した場合、「true」または「false」を繰り返し出力することがあります。
この例は、リバース プロキシを使用しない場合でもクライアント側で機能するため、www.example.com のポート 80 で server.js を実行すると、. 誰かがこの問題の原因を指摘できれば素晴らしいと思います。node.js v0.8.23、socket.io バージョン 0.9.14、node-http-proxy バージョン 0.10.1 を使用しています。
アップデート
おそらく、私は実際にノード v0.10.21 を使用しています。nvm を使用してノードのバージョンを切り替えてv0.8.23を使用していると思っていましたが、何らかの理由で v0.10 に戻ってしまいます。http-proxy がノード バージョン 0.8 以降の Web ソケットをサポートしていないことは既知の問題であるため、それが原因である可能性があります。もっと良いものが見つかるまで、robertklepのソリューションを使用しています。