2
socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room');

没有击中客户端。我只能看到来自以下的消息:

socket.emit('updateActivity', 'SERVER', 'you have CONNECTED to '+ socketEntity.roomName);

我做错了socket.join()什么吗?

我还尝试给广播事件一个不同的名称而不是updateActivity,但它也不起作用。

日志输出中根本没有提到广播发射。

问题更新:

我找到了一个解决方案,如果我将 broadcast.to() 替换为以下代码段,它将起作用:

socket.get(socketEntity.roomId, function (error, room) {
   io.sockets.in(room).emit('updateActivity', 'SERVER', 'you -joined- this group '+ socketEntity.roomName);
});

但我不知道为什么会出现这种情况......所以不知何故roomio.sockets.in() 上面isn't的参数与字符串相同socketEntity.roomId

原始代码:

服务器:

io.sockets.on ('connection', function (socket){
    socket.on('joinRoom', function(socketEntity){
        socket.join(socketEntity.roomId);
        socket.emit('updateActivity', 'SERVER', 'you have CONNECTED to '+ socketEntity.roomName);
        socket.broadcast.to(socketEntity.roomId).emit('updateActivity', 'SERVER', 'you -joined- this room'+ socketEntity.roomName);
    });
});

客户:

HTML:
<ul id="activityList" class="dropdown-menu"></ul>
JavaScript:
$(document).ready(function(){
    var socketEntity = {roomId:sampleRmId, roomName: "sample room"}
    socket.emit('joinRoom', socketEntity);


    socket.on('updateActivity', function (username, data){
        $('#activityList').prepend('<li><a href="#"><div>'+ data +'</div></a></li>');
    });
})
4

1 回答 1

7

socket.broadcast会将消息发送给除正在调用它的客户端之外的所有其他客户端。

socket.emit仅发送给该特定客户

io.sockets.emit发送给所有客户

于 2013-03-26T17:12:14.793 回答