为了账号安全,请及时绑定邮箱和手机立即绑定

Node.js - 在“连接”事件上区分服务器连接和断开连接

Node.js - 在“连接”事件上区分服务器连接和断开连接

茅侃侃 2021-11-25 16:44:47
我正在我的 Node.js 应用程序中使用net.createServer. 我向“连接”事件添加了一个事件侦听器,以便能够确定何时建立了连接。到目前为止一切顺利。问题是,当我断开连接时,它似乎再次触发了“连接”事件!并且没有“断开”事件,所以我不知道如何知道它是连接还是断开!const server = createServer({ allowHalfOpen: true }, (socket) => {  this._socket.on("data", (buffer) => {    // ...  });  this._socket.on("end", () => {    // ...});server.on("connection", () => {  console.log("Connected or Disconnected!")});如何确定连接是建立还是结束?如果可能的话,我想避免使用标志来跟踪状态。
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

在连接监听事件中,有一个用于断开连接的监听事件:


var clients = [];

server.on('connection', (socket) => {


    // add client

    clients.push({id:15, name:'client15'}); 


    socket.on('disconnect', () => {

        // first search client and  remove

    });

});

现在下一个问题是:我怎么知道哪个人断开了连接?


这个问题的答案不仅仅是将逻辑置于流程中,您可以为保存客户端创建一个全局变量,当此人启动会话或连接到套接字时,它会注册在该变量中,并且当它断开连接时必须采取在上述变量中,这不是一个例子,但可能有更好的方法。


查看完整回答
反对 回复 2021-11-25
?
守着一只汪

TA贡献1872条经验 获得超3个赞

所以我对这个似乎有效的问题的天真方法是使用 getConnections,它会在每个连接事件上增加,并查看它是均匀还是不均匀,以便能够确定它是连接还是断开:


server.on("connection", () => {

  server.getConnections((e, c) => {

    if (c % 2 === 0) {

      // Disconnected

    } else {

      // Connected

    }

  });

感觉这不是一个好的解决方案,但也许足够好,直到有人可以向我展示更好的方法。


查看完整回答
反对 回复 2021-11-25
?
www说

TA贡献1775条经验 获得超8个赞

server.on("close", () => {

  console.log("Disconnected!")

});

https://nodejs.org/api/http.html#http_event_close


查看完整回答
反对 回复 2021-11-25
  • 3 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信