私はNode.jsとExpressの初心者です:(他のモジュールのsocket.ioオブジェクトへのアクセスに問題があります。ソケットオブジェクトを保持するグローバル変数を作成しましたが、そのユーザーが接続を閉じるとすぐに接続はもう利用できません。技術的には接続はまだ残っていると思いますが、リソース上の理由で削除します。
以下では、接続が確立されるたびに、他のすべてのモジュールからアクセスできるグローバル変数にそのソケットを割り当てていることに注意してください。
// App.js
var io = require('socket.io').listen(server);
var sessionsConnections = {};
io.sockets.on('connection', function (socket)
{
global.socket = socket;
sessionsConnections[socket.id] = socket;
.....
}
socket.on("disconnect", function()
{
delete sessionsConnections[socket.id];
});
// Match.js
global.socket.emit('lobby:createMatch', data);
グローバルクローズに最後に割り当てられた接続の場合、Match.jsはねじ込まれます。この時点で、Match.jsはそのsocket.io参照を必要とする唯一のモジュールです。Match.jsには、イベントの処理、変更の発行、ビューのレンダリングのための多数のエクスポートがあります。
これをどのように処理するかについての提案はありますか?グローバル参照になる目的で、App.jsに存在する最初のソケット接続をインスタンス化することは可能ですか?