0

pm メッセージを送信するために Node.js サーバー側と ios クライアント側を実装しました。しかし、主な問題は、私のコードはまだテキストメッセージがすべてのクライアントにブロードキャストされているように動作します。(私は3台の電話で試しました。特定のクライアントにeメッセージを送信しただけですが、クライアントとそのメッセージを送信した私の電話の両方にメッセージが送信されました)

私のサーバーコードは次のようになります:

io.sockets.on('connection', function (socket) {
  var userName;
  var userSrcID;

  socket.on('setUserName',function(user){
    userName = user.name;
    userSrcID = user.id;
    clients[user.name] = socket;
    clients[user.id] = socket;
    console.log('data = ',user);
    //io.sockets.emit('new user', user.name + " has joined.");
  });

  socket.on('message', function(msg){
    io.sockets.emit('message', msg);
  });

  socket.on('pm', function(msg){
    fromMsg = {from:userSrcID, txt:msg}
    //clients[msg.to].emit('private message', fromMsg);
    console.log('Gidicek username:',userName);
    io.sockets.emit('new message',{msg: msg,destID:userSrcID}); 

そのメッセージの送信先ユーザー ID が私のユーザー ID に属していない場合は表示しないという条件を作成できますが、スイッチの代わりにオールドスクール HUB ネットワークを使用するのが好きです :)

どんな助けでも大歓迎です

よろしくお願いします 、

4

2 に答える 2

0

メッセージをオブジェクトとして送信できるため、受信者のユーザー ID を含めることができます。レシーバーソケットを取得して、その特定のユーザーにメッセージを送信できます。

このようになります。

// assuming msg object would look something like this
// msg = { text: 'message text', receiverID: 123 };  

socket.on('pm', function(msg){
    var userSocket = clients[msg.receiverID];
    userSocket.emit('new message',{msg: msg.text, destID:userSrcID}); 
});
于 2013-08-14T14:51:34.630 に答える
0

は使用せずio.sockets.emit、clients 配列に保存したソケットを使用します。

特定のユーザーに送信する場合は、次のように、ユーザー名または ID をメッセージと共に渡す必要があります。

socket.on('pm', function(message) {
    var to = msg.toUserId;
    var msg = message.message;
    clients[to].emit(msg);
}

クライアント内から:

socket.emit('pm', {'toUserId': userid, 'message': 'hello over there'});
于 2013-08-14T14:45:18.853 に答える