3

是否可以仅向发送者全局发出但在 socket.on('connect') 事件之外?我正在寻找socket.broadcast.to().emit()可以在 app.post 方法中使用的东西,而不是在 connect 方法中,所以我不能只使用 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页面的用户发送“某些东西”,对吗?
如果是这样,您不能在app.post方法中执行此操作,因为此代码将在客户端收到 HTML 代码之前执行,因此无法建立客户端和服务器之间的握手。

我认为最好的解决方案是仅在/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 回答
0

如果您可以以某种方式将发送者的 socektID 存储在一个变量中,那么您可以在 app.post 方法中向该特定客户端发出。做这样的事情:

var id;
io.sockets.on('connection', function(socket){
  socket.on('some event'){
    id = socket.id;
  }
});

并在 app.post 方法中执行此操作:

app.post('/room', function(req, res) {
  io.sockets.socket(socketid).emit('event name', {data: yourData});
});

虽然我提出了这个解决方案,但你的方法似乎不太有说服力。

于 2014-02-11T05:46:18.930 回答