【问题标题】:performing same action for all users connected in same room in socket.io using jquery使用 jquery 对 socket.io 中同一房间内连接的所有用户执行相同的操作
【发布时间】:2018-09-18 02:34:36
【问题描述】:

我正在尝试创建一个类似于https://www.omegle.com/ 的网站,它是一次一对一的对话。

如果任何已连接的用户单击断开连接按钮结束聊天,则必须向两个用户显示new chat div

但问题是 new chat div 只显示给点击断开按钮的用户。

这是我的客户端代码

 $disconnect.click((e) => {
    e.preventDefault();
    socket.emit('user disconnect', socket.id, (data) => {
        if(data){
            $messageForm.hide();
            $newChat.show();
        }
    });
});

我没有任何想法来解决这个问题。请有人帮我解决这个问题。

提前谢谢。

【问题讨论】:

  • 您是否在服务器上为两个客户端创建了空间?
  • @QuỳnhNguyễn 是的,我做到了。

标签: javascript jquery node.js socket.io


【解决方案1】:

这里的重点是您使用了emit 回调。但是这个回调只响应源客户端。

所以在这里您可以将您的客户端处理程序更改为:

socket.partner_id 是您的对话伙伴。

$disconnect.click((e) => {
    e.preventDefault();
    socket.emit('user disconnect', socket.partner_id, (data) => {
        if(data){
            console.log('Closed chat room by your self')
            $messageForm.hide();
            $newChat.show();
        }
    });
});
socket.on('user disconnect', () => {
    console.log('Closed chat room by your partner')
    $messageForm.hide();
    $newChat.show();
})

和你的服务器端:

socket.on('user disconnect', function (partner_id, fn) {
    socket.broadcast.to(partner_id).emit('user disconnect');
    fn(true);
}))

希望对您有所帮助。

【讨论】:

  • 谢谢。完美的逻辑。
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 2012-08-26
  • 2015-07-05
  • 2021-04-20
  • 2017-08-03
  • 2014-08-01
相关资源
最近更新 更多