繁体   English   中英

Socket.io-向发件人和客户端发送不同的数据?

[英]Socket.io - send different data to sender and clients?

我正在学习NodeJS和Socket.IO,并一直遵循着各式各样的教程,主要侧重于建立基本的聊天室。

我的应用程序到目前为止工作正常:能够与客户一起发送消息,并能够移至其他“房间”。

现在,我试图对其进行整理,使它看起来很重要。

我绊倒了以下想法:

当用户A从房间A移到房间B时,将发送generate()方法来更新具有用户计数的数组,然后将其发送回发送方。 然后更新侧面板中的房间列表,例如,房间A(0),房间B(1)。

现在,向发送者发送新数据变得容易并且可行,房间列表得到更新,其他房间(发送者不在其中)具有超链接(这是用户在房间之间移动的方式)

但是我想将数据发送给其他客户端,因此他们的房间列表也会更新。 发送与以前相同的数据意味着其他客户端的房间列表不正确,因为该数据引用了发送者加入的新房间名称,而不是其他客户端当前所在的房间。

一些代码:

socket.on('switchRoom', function(data) {
    var newroom = sanitize(data).escape().trim();

    socket.leave(socket.room);

    socket.join(newroom);

    socket.room = newroom;

    socket.emit('updaterooms', rooms, newroom);

    // this is the problem area, socket.room should be the socket.room data for the non-sending client
    //socket.broadcast.emit('updaterooms', rooms, socket.room);
});

我如何将所有包含在它们自己的套接字“会话”(即socket.room)中的数据发送给所有其他客户端(不是发送者)?

您将需要发出一个针对每个套接字的生成的消息。 您需要做的是遍历每个套接字,根据每个套接字发出自定义消息,例如:

io.sockets.on('connect', function(socket) {
    socket.on('switchRoom', function(data) {
        var newroom = sanitize(data).escape().trim();

        socket.leave(socket.room);

        socket.join(newroom);

        socket.room = newroom;

        socket.emit('updaterooms', rooms, newroom);

        io.sockets.clients.forEach(function(client) {
            if (socket != client) {
                client.emit('updaterooms', rooms, client.room);
            }
        });
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM