我正在尝试在使用 express 3 和 socket.io 创建的应用程序中实现私人消息传递
当客户端使用客户端用户 ID 连接房间时,会自动创建并加入。这主要用于通知之类的东西。现在我也试图让这也适用于私人聊天。当用户单击发送按钮时,消息与发送者的用户 ID(来自会话用户 ID)和从隐藏字段或属性中获取的所有者的用户 ID 一起发送的元素。发件人使用所有者用户 ID 命名空间加入房间。这样做的问题是,当发件人转到另一个页面或刷新浏览器时,他会与房间断开连接,并且不会收到来自所有者的任何进一步消息。他必须发送一条新消息才能重新加入业主房间。现在我如何感知与主人房间的连接?还是我做错了?有没有更好或标准的方法来实现这一目标?
服务器:
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>');
});