gpt4 book ai didi

javascript - Socket.io 将两个客户端添加到房间

转载 作者:行者123 更新时间:2023-12-02 19:36:47 24 4
gpt4 key购买 nike

我正在尝试在使用express 3和socket.io创建的应用程序中实现私有(private)消息传递

当客户端连接带有客户端用户 ID 的房间时,会自动创建并加入。这主要用于通知之类的东西。现在我也在尝试使此功能也适用于私有(private)聊天。当用户单击发送按钮时,消息将与发件人的用户 ID(来自 session 用户 ID)以及从隐藏字段或属性中获取的所有者的用户 ID 一起发送的元素。发送者使用所有者 userid 命名空间加入房间。这样做的问题是,当发送者转到另一个页面或刷新浏览器时,他会与房间断开连接,并且不会收到来自所有者的任何进一步消息。他必须发送一条新消息才能重新加入所有者房间。现在我如何保持与业主房间的连接?还是我做的这一切都是错的?是否有更好或标准的方法来实现这一目标?

服务器:

io.on('connection', function (socket) {
var sh = socket.handshake;

socket.join(sh.session.userid);

socket.on('chat', function (data) {
if (data.user) {
socket.join(data.owner);
}
io.sockets.in(data.owner).emit('chat',
{user: sh.session.user, message: data.message});
});
});

客户:

var socket = io.connect('https://localhost/');

$('#send_message').click(function (e) {
socket.emit('chat',{message: $('.message').val(),
user:$('#user'), owner:$('#owner')} //Get this from hidden fields in chat form );
e.preventDefault();
});

socket.on('chat', function (data) {
$('ol').prepend('<li>' + data.user + '<br />' + data.message + '</li>');
});

最佳答案

对。因为当您重新加载页面时,服务器会收到“客户端已断开连接”消息并取消订阅套接字。客户端需要重新发出“聊天”消息(具有相同的所有者 ID)才能返回私有(private)提要。

一种方法是让客户端将所有者 ID 保存在 Cookie 中,并在每次页面加载时调用它。或者,您可以让服务器使用 session cookie (http://www.senchalabs.org/connect/session.html) 存储和调用此信息,这本质上与第一个选项非常相似。

关于javascript - Socket.io 将两个客户端添加到房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10835969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com