Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io将两个客户端添加到文件室_Javascript_Node.js_Chat_Express_Socket.io - Fatal编程技术网

Javascript Socket.io将两个客户端添加到文件室

Javascript Socket.io将两个客户端添加到文件室,javascript,node.js,chat,express,socket.io,Javascript,Node.js,Chat,Express,Socket.io,我正在尝试使用express 3和socket.io在im创建的应用程序中实现私人消息传递 当客户机使用客户机连接房间时,将自动创建并加入userid。这主要是为了通知之类的东西。现在,我也在尝试将此功能用于私人聊天。当用户单击“发送”按钮时,消息将与发件人的用户ID(来自会话用户ID)以及从元素的隐藏字段或属性中获取的所有者的用户ID一起发送。并且发送者使用所有者的userid名称空间加入房间。问题是,当发送者转到另一个页面或刷新浏览器时,他与房间断开连接,并且没有收到来自所有者的任何进一步消

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

当客户机使用客户机连接房间时,将自动创建并加入userid。这主要是为了通知之类的东西。现在,我也在尝试将此功能用于私人聊天。当用户单击“发送”按钮时,消息将与发件人的用户ID(来自会话用户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>');
});
客户端:

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>');
});
var socket=io.connect('https://localhost/');
$(“#发送消息”)。单击(函数(e){
emit('chat',{message:$('.message').val(),
用户:$('#user'),所有者:$('#owner')}//从聊天表单中的隐藏字段获取此信息);
e、 预防默认值();
});
socket.on('chat',函数(数据){
$('ol').prepend('
  • '+data.user+'
    '+data.message+'
  • '); });
    对。因为当您重新加载页面时,服务器会收到“client disconnected”消息并取消订阅套接字。客户端需要重新发出一条“聊天”消息(具有相同的所有者id),以便返回到私有提要


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

    默认情况下,客户端不重新连接到服务器吗?临时登录站点和刷新站点有什么不同?两次都执行相同的代码,对吗?好的,所以我改为socket.join(sh.session.rooms);并设置会话数据室=data.owner。然后可以将用户连接到的所有房间添加到对象或其他对象中。谢谢