【问题标题】:emit data on disconnect event from client to server on node在节点上从客户端到服务器的断开连接事件上发出数据
【发布时间】:2016-02-24 00:20:55
【问题描述】:

我无法在断开连接事件时将数据从客户端发送到服务器

//客户端

var gname = "asd";
    socket.emit('disconnect',gname);

//服务器端

    socket.on('disconnect', function (data) {
console.log(data);

        var i = connect_clients.indexOf(data);
        if(i != -1) {
            connect_clients.splice(i, 1);
        }
}

【问题讨论】:

    标签: node.js sockets socket.io


    【解决方案1】:

    您将无法这样做,因为套接字已与服务器断开连接。当服务器检测到断开连接(在此之前不会神奇地通过一小部分)并且客户端和服务器之间的“桥梁”已经关闭/中断/无论如何 - 没有连接意味着没有数据交换时,服务器上的事件会触发。

    关于如何处理断开连接的客户端,您有两种选择:

    1. 使用数据库或本地变量通过“socket.id”存储一些用户信息(例如跟踪在线用户)。当您在服务器上收到 disconnect 事件时,您可以看到套接字的 id 断开连接。使用此id 做一些必要的事情,例如减少在线用户数量并将其广播给其他人。

    2. (相当糟糕的解决方案)等待客户端上的reconnect 事件并在重新建立连接时从那里发送数据。当然,如果服务器保持关闭,数据可能会丢失。

    如果您需要执行一些简单的服务器端操作,解决方案 1 可能工作得很好,但如果您有一些复杂的东西,例如未保存的表单数据,您将不得不想出某种将数据保存在 localStorage 中的方法,例如,并将其同步回reconnect

    【讨论】:

    • 我不能让它重新连接,否则它会解决我的问题
    • 那么可能将数据存储在localStorage 并在下一次连接时将其发回在这种情况下是合适的解决方案。
    • 你的意思是在套接字中,一切都对它很重要,套接字 id 以及我将保存在客户端的套接字 id 下并根据需要进行数据连接的所有内容
    • 对不起,我很难理解你。你能试着改写你上面的评论吗?谢谢
    • 客户端。 More info here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多