4

現在、私は次のようなゲッター/セッターソケットモジュールを持っています

var socket;

module.exports.getSocket = getSocket;
module.exports.setSocket = setSocket;

function getSocket() {
    return socket;
}
function setSocket(sock) {
    if (undefined == socket) socket = sock;
}

app.jsでは次のように設定しました

var sio = require('./lib/socket');
var io = require('socket.io').listen(app);
io.sockets.on('connection', function (socket) {
    sio.setSocket(socket);
});

私のモジュールでは、次のように使用します

sio = require('./lib/socket');
socket.getSocket().broadcast.emit(...);

これを行うためのより良い方法はありますか?

編集:クライアントソケットによって開始されないメッセージを起動する問題の一般的な解決策が欲しいです。たとえば、外部ソースから株価を取得し、価格の更新時にイベントを発生させたいとします。クライアントによって開始されないので、どうすればソケットにアクセスできますか?または、POSTリクエストに応答してソケットメッセージを送信したいとします。もう一度、ソケットにアクセスする方法がわかりません。

4

1 に答える 1

4

ソケットを共有するためのオプションはいくつかありますが、モジュールが何をするかについてもっと知るのに役立ちます。詳細を知らなくても、共有状態を使用するのではなく、呼び出している関数を介してソケットをモジュールに渡すことをお勧めします。

共有状態を使用する必要がある場合(ソケットメッセージ以外の何かによってトリガーされた特定のユーザーにメッセージを送信しようとしている場合)、確立されたセッションフレームワークに固執し、ソケットIDを保持することをお勧めします。IDを使用するだけで正しいソケットを取得できます。

セッションでsocket.ioを使用する方法については、この回答を参照してください:socket.ioおよびsession?

さらに詳細を追加して、回答を修正します。

アップデート

接続しているすべての人にブロードキャストしようとしている場合は、ソケットハンドルは必要ありません。socket.ioを参照する任意のモジュールから、を呼び出すことができますio.sockets.emit('stuff')

于 2012-04-24T06:30:37.323 に答える