3

socket.on('connect') イベントの外側で、送信者のみにグローバルに発行することは可能ですか? socket.broadcast.to().emit()connect メソッドではない app.post メソッドで使用できるようなものを探しているので、socket.emit だけを使用することはできません

app.post('/room', function(req, res) {   
            io.sockets.emit('something');         

});

SENDERだけに発信したい「何か」

私のコード:

socket_id;

app.post('/room', function(req, res) {
      if (req.body.user == ''){
         io.sockets.socket(socket_id).emit('usernameError', 'Type your username');
    }
    else if (users[req.body.user] !== undefined ) {
      io.sockets.socket(socket_id).emit('usernameError', 'Username exists.'); 
    }  
            else{
        users[req.body.user] = req.body.user;
        user = req.body.user;
        io.sockets.emit('newUser', user+' join to the room');             
               res.render('room');
                  }     
});

io.sockets.on('connection', function(socket) { 
   socket.username = user;
   socket.join('room1');
   socket.id = socket_id;   
});
4

2 に答える 2

2

私が理解している限り、/roomページに来たばかりのユーザーに「何か」を送りたいと思いますよね?
その場合、クライアントが HTML コードを受信する前にapp.postこのコードが実行され、クライアントとサーバー間のハンドシェイクが確立されないため、メソッドでそれを行うことはできません。

最善の解決策は、クライアント側の/roomページのみで次のコードを実行することだと思います。

var socket = io.connect('/');   //your socket.io connection (may be different)
socket.on('something', function(data) {
  console.log(data);
});
socket.emit('i_am_room_page');  //tell server we are on /room page

そしてサーバー上で:

io.sockets.on('connection', function(socket) {
  socket.on('i_am_room_page', function(data) {
    socket.emit('something', {your: 'data'});
  });
});

お役に立てれば

于 2014-02-10T20:40:38.970 に答える