javascript - 套接字 io : how to pass paramter to disconnet socket event?

标签 javascript angularjs node.js socket.io

我正在使用 socket io 构建聊天应用。

当“用户 x”从聊天中断开连接时,我想打印到控制台日志:“再见用户 x”。

为此,我需要将用户名作为参数传递给断开连接事件。

问题是我不知道如何将数据传递给断开连接事件:

socket.on('disconnect', function(){...})

当用户断开连接时自动调用它。

我需要有类似的东西

socket.on('disconnect', function(user_name){
    console.log('bye '+user_name);
})

但如果这可能(是吗?)那么我如何在客户端传递此参数(我的情况是 Angular )?

我完整的 socket io server.js 代码如下。

io.on('connection', function(socket){
    io.emit('chat_message', "welcome");

    socket.on('room', function(room) {
        socket.join(room);
    });

    socket.on('chat_message', function(data){
        socket.broadcast.to(data.room).emit('chat_message',data.msg);
    });
    socket.on('info_message', function(data){
        socket.broadcast.to(data.room).emit('info_message',data.msg);
    });

    socket.on('disconnect', function(){
        console.log('bye '+socket.id);
        io.emit('chat message', "Bye");

    });
});

最佳答案

您不能将数据传递给断开连接事件。但是,您可以在较早的某个时间点将自己的属性附加到 socket 对象,或者您可以保留自己的带有附加信息的套接字映射。

您只需要确保服务器知道每个套接字的用户名(我无法从您的问题中判断用户名是客户端数据还是服务器端数据)。然后,您可以将它作为属性附加到套接字对象。这样做之后,当您收到断开连接事件时,您可以只查看正在断开连接的套接字上的那个属性。

因此,无论用户名信息来自何处,您都可以在服务器知道它是什么时在套接字对象上设置该属性,然后您可以为断开连接执行此操作:

socket.on('disconnect', function(){
    console.log('bye ' + socket.user_name);
});

或者,如果用户名在 cookie 中,您可以随时通过解析 socket.handshake.headers.cookie 获取该 cookie 值。

关于javascript - 套接字 io : how to pass paramter to disconnet socket event?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687864/

相关文章:

javascript - 如何将 Python 数据发送到 JavaScript

javascript - React 路由器和 props

javascript - 理解javascript中的模块设计模式

javascript - `element.next().insertBefore(element)` 是做什么的?

javascript - 使用 Telnet 的 Node.js 客户端和服务器游戏

javascript - 获取队列属性不起作用

javascript - 悬停 2 秒时显示下拉菜单

c# - 前后端同步日期格式

javascript - AngularJS - 根据变量的值显示 DOM 元素

json - 漂亮地打印 Node.JS 中express返回的JSON