1

私は過去 1 週間、この特定の問題を探していましたが、この件に関する情報が見つからなかったので (それは時代遅れではありませんでした)、他のことに取り組むことにしました。しかし今、node.jsとsocket.ioを使用してサーバーに接続されているIDを使用して、特定のクライアントに(作成した)データを送信できるようにする必要があります。新しい接続ごとに ID をオブジェクトに格納しています。私が知る必要があるのは、選択した接続 ID に送信する方法です。

次のようなもの: function send(data, client.id) {};

TCP ではなく、http サーバーを使用しています。

これは可能ですか?

編集:

server = http_socket.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(respcont);
    client_ip_address = req.header('x-forwarded-for');
    });
socket = io.listen(1337);   // listen
//=============================================
//  Socket event loop
//=============================================
socket.on ('connection', function (client_connect) {
    var client_info = new client_connection_info();     // this just holds information 
    client_info.addNode(client_connect.id, client_connect.remoteAddress, 1); // 1 = trying to connet

    var a = client_info.getNode(client_connect.id,null,null).socket_id; // an object holding the information.  this function just gets the socket_id
    client_connect.socket(a).emit('message', 'hi');

    client_connect.on('message', function (data) {
         });
    client_connect.on ('disconnect', function () {

    );
});

解決策:私は実験するだけでそれを理解しました...あなたがしなければならないことは、socket.idではなくSOCKETを保存することを確認し(私が行っていたように)、代わりにそれを使用することです。

client_info.addNode(client_connect.id, client_connect.remoteAddress, client_connect, 1)

var a = client_info.getNode(client_connect.id,null,null,null).socket;
    a.emit('message', 'hi');
4

3 に答える 3

1

はい、可能です。

io.sockets.socket(id).emit('message', 'data');
于 2012-04-18T06:19:57.447 に答える
1

これを行う必要がある場合、最も簡単な方法は、IDを接続にマップするグローバル連想配列を構築して維持することです。その後、必要なときにいつでも適切な接続を検索し、通常の送信関数を使用できます。アレイから接続を削除するにはロジックが必要ですが、それほど苦痛ではありません。

于 2012-04-18T05:52:34.470 に答える
0

ソリューションには、スケーリングという1つの大きな欠点があります。アプリに1台以上のマシンが必要な場合はどうしますか?内部IDの使用も難しい場合があります。外部ID(ユーザー名など)を使用することをお勧めします。

この投稿と同様に、部屋を使用することをお勧めします(スケーリングを可能にするためにRedisと一緒に)。新しいソケットごとに個室を追加します(たとえば、ユーザーの名前に基づいて)。コードは次のようになります。

socket.join('priv/' + name);
io.sockets.in('priv/' + name).emit('message', { msg: 'hello world!' });

このソリューションにより、複数のマシンが任意のユーザーにイベントを発行できます。また、私の意見では非常にシンプルでエレガントです。

于 2012-04-18T07:54:27.377 に答える