Socket.io 将两个客户端添加到房间
Socket.io add two clients to room
我正在尝试在使用Express 3和 socket.io 创建的应用程序中实现私人消息
传递当客户端将房间与客户端连接时,将自动创建并加入用户 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>');
});
对。因为当您重新加载页面时,服务器会收到"客户端已断开连接"消息并取消订阅套接字。客户端需要重新发出"聊天"消息(具有相同的所有者 ID)才能返回私人源。
一种方法是让客户端将所有者 ID 保存在 cookie 中,并在每次页面加载时调用它。或者,您可以使用会话cookie(http://www.senchalabs.org/connect/session.html)存储服务器并调用此信息,这在本质上与第一个选项非常相似。
相关文章:
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- 如何在客户端验证中验证两个变量规则
- Socket.io 将两个客户端添加到房间
- 将两个 socket.io 客户端连接在一起(建立套接字到套接字,跨浏览器连接)
- 在客户端连接 HTML 中的两个字符串(无服务器)
- 仅使用客户端在两个 HTML 页面之间传递大量数据
- 我不能't使用srvflx候选者在同一局域网中的两个客户端之间建立ice连接
- Jquery PHP mySQL ajax方法将数据同步到两个客户端
- 聊天应用程序-测试两个客户端之间的交互
- Javascript:每个客户端有两个连接
- 客户端购物车:在数组中添加两个具有相同描述的项目
- 套接字.io:如何处理打开两个窗口的认证客户端
- 用户和来宾使用两个不同的模板?或者使用客户端变量动态更改视图
- 如何使用套接字.io代码放在两个客户端JS文件中
- Redis / Node.js - 2个客户端(1个pub/sub)导致写问题
- 允许两个客户端在没有服务器的情况下交互
- 在两个web浏览器客户端之间发送信息的方法
- 将两个客户端JavaScript计时器与服务器同步
- 如何最好地将客户端验证添加到这两个字段中
- 客户端两次连接到服务器Socket.io