NodeBB论坛https://github.com/designcreateplay/NodeBB在io.sockets对象上使用in
方法,该方法似乎与此处的in
方法https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in不同但是我没有在socket.io文档中看到in
方法。
下面的代码中in
方法做了什么?
下面的ThreadTools.lock方法调用方法websockets.in
,正如您在此处看到的那样returns io.sockets.in(room)
。我是
websockets.in = function(room) {
return io.sockets.in(room);
};
ThreadTools.lock
ThreadTools.lock = function(tid, socket) {
topics.setTopicField(tid, 'locked', 1);
if (socket) {
websockets.in('topic_' + tid).emit('event:topic_locked', {
tid: tid,
status: 'ok'
});
if (socket) {
socket.emit('api:topic.lock', {
status: 'ok',
tid: tid
});
}
}
}
答案 0 :(得分:2)
嘿@BrainLikeADullPencil!
我们使用.in()
向特定“房间”中的用户发送消息。对于ThreadTools.lock
,它会向该主题的房间中的所有用户发送event:topic.locked
消息(用户在浏览主题时会自动加入主题室)。
在客户端,我们侦听该消息并将主题锁定在DOM中(加上其他各种小变化)
答案 1 :(得分:1)
wiki说
有两种方式可以发送到房间:使用
socket.broadcast.to('room')
或io.sockets.in('room')
。