2016-03-19 11 views
0

私はlocalyメッセージを送信し、ブロードキャストする方法を知っていますsocket.broadcast.emit() - すべての接続されたクライアントは同じメッセージを受信します。socket.ioでクライアントにメッセージを送信する方法

ここで私は特定のクライアントにプライベートメッセージを送信する方法を知りたいと思います.2人(クライアントからクライアントへのストリーム)間のプライベートチャット用に1つのソケットを意味します。ありがとう。

答えて

1

サーバ側:

var usersConnectedTo = {}; 

io.on('connection', function(socket){ 

socket.on('set_socketid', function(user){ 
    usersConnectedTo[user] = socket.id; // if usersConnectedTo[user] is undefined 
}); 
socket.on('private_message', function(private_msg){ 
    var id = usersConnectedTo[private_message.user]; 
    io.to(id).emit('private_message', private_message.msg); 
    }); 
}); 

クライアント側:

io.emit('user', user1+user2); // user should be such that when A connects to B for 
// first time or B connects to B for first time, it should always return same user. 

io.emit('private_message', { 
    user: user1+user2, 
    msg: 'private_msg' 
}); 

usersConnectedTo変数店舗ごとのプライベートチャットsocketid。

(A、B)と(A、C)間のチャットのために異なるsocket.idを保存するために、socket.idはABとACとして保存されます。

userとprivate_messageは同期して送信する必要があります。

0

SURE:単純に、

これは、何が必要です:

io.to(socket.id).emit("event", data); 

ユーザーがサーバーに参加したときに、ソケットの詳細はID.This含めて生成されるIDは、実際に送信することができますされ特定の人々へのメッセージ。

まず我々は

var people={}; 

    people[name] = socket.id; 

、アレイ内のすべてのsocket.idsを格納する必要があり、ここでの名前は、レシーバ名です。例:私たちがメッセージを送信しているときは常に

people["trojan"]=2387423cjhgfwerwer23; 

そうで、今、私たちはレシーバ名とそのsocket.idを取得することができます:私たちはrecievername.Youを知っている必要があり、このため

をするレシーバの名前を放出する必要がありますサーバ。

最終的なものは次のとおりです。これはあなたのためにうまく機能

socket.on('chat message', function(data){ 
    io.to(people[data.reciever]).emit('chat message', data.msg); 
    }); 

希望!!グッドラック

関連する問題