【问题标题】:How to tell when a socket actually disconnects如何判断套接字何时真正断开连接
【发布时间】:2021-04-21 17:28:55
【问题描述】:

socket.on('disconnect') 没有达到我的预期。我想知道用户何时离开我的网站,而不仅仅是切换页面。因为目前,在我的网页上移动到不同的路由表示套接字已断开连接,但用户仍在服务器上。

基于套接字连接的用户出勤是一个坏主意还是我应该改用 HTML 我试过<body onbeforeunload='imLeaving()'>,但仍然表示如果用户转到其他页面,他们就会断开连接

我试过这个Socket.io How to tell when somebody leaves,但它也给了我“错误”的断开连接

我是在解决这个问题,还是我的代码有明显问题。

server.js

const express = require("express");
const app = express();
const http = require("http").Server(app)
const io = require("socket.io")(http)

app.get("/", (req, res) => {
    res.sendStatus(200)
})

io.on('connection', (socket) => {
    socket.on('disconnect', () => {
        console.log(socket.disconnected)
        console.log("disconnect")
    })
});

http.listen(4000, () => {
    console.log("Listeneing on *:4000")
})

【问题讨论】:

    标签: html node.js express socket.io


    【解决方案1】:

    你可以这样做:

    1. 在客户端,定义一个变量connection_count。应用程序启动时,将其传递给query{},就像您在auth{} 中传递身份验证令牌一样。

    2. 每次发生新连接时,在服务器端解析来自 socket.handshake 的查询参数并递增 var。

    3. 每次断开连接事件触发时,在同一进程中递减var。

    4. var == 0时,编写一个函数,通知用户已终止所有连接。

    注意:如果用户第一次连接,var 的值将为 0,因此当他们只是试图连接。为防止此类行为,您可以使用 query{} 传递一些标志,这些标志将在一个周期内改变。

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 2013-12-31
      • 1970-01-01
      • 2010-10-15
      • 2013-11-22
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多