11

すべてのクライアントにメッセージを送信しても問題ありませんが、特定のユーザー名にメッセージを送信したいと考えています。私のserver.jsファイルは次のようになります。それhttp://localhost:8080が実行されると、クライアントコードはユーザーをオブジェクトのユーザー名とソケットオブジェクトに追加します。そして、接続された各クライアントに個々のメッセージを即座に返します。

//var io = require('socket.io').listen(8080);
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')
var usernames={};  
 app.listen(8080);

// on server started we can load our client.html page
function handler ( req, res ) {
  fs.readFile( __dirname + '/client.html' ,
  function ( err, data ) {
    if ( err ) {
      console.log( err );
      res.writeHead(500);
      return res.end( 'Error loading client.html' );
    }
    res.writeHead( 200 );
    res.end( data );
  });
};
io.set('log level', 1); // reduce logging
io.sockets.on('connection', function (socket) {

 socket.on('adduser', function(username){
        // store the username in the socket session for this client
        socket.username = username;
        // add the client's username to the global list
        usernames[username] = username;
        // send client to room 1
        console.log(username+' has connected to the server');
        // echo to client they've connected
  });

  socket.on('pmessage', function (data) {
        // we tell the client to execute 'updatechat' with 2 parameters
        io.sockets.emit("pvt",socket.username,data+socket.username); // This works
        io.sockets.socket(socket.username).emit("pvt",socket.username,data+socket.username); // THIS DOESNOT
   });

  socket.on('disconnect', function(){
        // remove the username from global usernames list
        delete usernames[socket.username];

        // echo globally that this client has left
       console.log(socket.username + ' has disconnected');
    });
});

メッセージを発する部分

socket.on('pmessage', function (data) {
        // we tell the client to execute 'updatechat' with 2 parameters
        io.sockets.emit("pvt",socket.username,data+socket.username); // This works and sends message to all clients
        io.sockets.socket(socket.username).emit("pvt",socket.username,data+socket.username); // THIS DOESNOT
   });
4

2 に答える 2

10

これを試して:

socket.on('pmessage', function (data) {
    // we tell the client to execute 'updatechat' with 2 parameters
    io.sockets.emit("pvt",socket.username,data+socket.username);
    io.sockets.socket(socket.id).emit("pvt",socket.username,data+socket.username); 
});

socket.id は socket.io によって保存され、クライアントの一意の ID が含まれています。これを使用して確認できます:

console.log(socket.id);
于 2012-06-06T19:41:35.033 に答える
1

すべてのクライアントIDを保存する必要があり、それに応じて特定のクライアントのIDを取得する必要があり、次のコードを使用します

var store={};//this will store all client id and username e.g. store={jay:"34jhjshdj343sasa"}
socket.on('pmessage', function (data) {
    var receiverUserName=data.username;
    var message=data.message;
    var id = store[receiverUserName];//get ID
    // we tell the client to execute 'updatechat' with 2 parameters
    io.sockets.emit("pvt",socket.username,data+socket.username);
    io.sockets.socket(id).emit("pvt",socket.username,data+socket.username); 
});

次に、これは特定のクライアントで発行されます

于 2014-10-31T09:32:49.013 に答える