サーバーで2つのExpress.jsアプリを実行しています。
「main-app」と呼ばれるプレーンなバニラアプリと、「socket-app」と呼ばれるSocket.IOを使用する別のアプリ。
「mydomain.com」で「main-app」を実行し、「socket.mydomain.com」のサブドメインで「socket-app」を実行しています
Expressの組み込みのvhostミドルウェアを介してsocket-appにリクエストをルーティングしています。
--main-app.js内-
var express = require('express');
var app = module.exports = express.createServer();
app.use(express.vhost('socket.mydomain', require('./socket-app/app.js')));
app.listen(8080, function(){
console.log("Express server listening on port %d in %s mode");
});
これは正常に機能し、socket.mydomainのポート8080でsocket-appが実行されているのを確認できます。
ただし、ここで説明するように、vhostを介してSocket.IOアプリを実行すると、WebSocketがタイムアウトし、「アップグレード」イベントを受信しないという問題があるようです。
だから私の質問は、この「アップグレード」イベントをメインアプリからソケットアプリにパイプして、接続されているすべてのソケットが誰かが接続および切断したときに聞こえるようにするにはどうすればよいですか?
「main-app」内から「upgrade」イベントを発行しようとしましたが、機能していないようです。
app.on('upgrade', function(req, socket) {
socket.emit('upgrade', app);
});
ここで何が欠けていますか?