【问题标题】:Node.js - Get list of all connected clients IP Addresses?Node.js - 获取所有连接的客户端 IP 地址的列表?
【发布时间】:2014-12-18 00:50:12
【问题描述】:

我正在制作一个聊天应用程序,我希望监控哪些用户在线,哪些用户已离开。 当用户加入 Connect 时,它会将他的 IP 以及用户名等添加到 mysql 用户在线表中。 当用户离开断开连接时,它将从在线用户中删除他的 IP。

以防万一发生任何意外情况,我想获取当前连接到服务器的客户端的所有 IP 地址,并将其与表中的 IP 地址进行比较,然后对哪些客户端已连接,哪些未连接进行排序。

那么如何获取已连接客户端的 ip 列表?

我想为此使用 MySQL 和 table 的原因是因为我想监控当前有多少用户从外部 PHP 站点在线。如果有更好的方法,我愿意接受建议。

【问题讨论】:

    标签: mysql node.js express socket.io


    【解决方案1】:

    一种解决方案是保留一个包含所有已连接套接字的对象(在连接时添加并在关闭时删除)。然后你只需遍历对象中的套接字。

    或者,如果您喜欢冒险,您可以使用未记录的方法来获取节点中的所有活动句柄并过滤它们。示例:

    var http = require('http');
    
    var srv = http.createServer(function(req, res) {
      console.dir(getIPs(srv));
      // ...
    });
    srv.listen(8000);
    
    function getIPs(server) {
      var handles = process._getActiveHandles(),
          ips = [];
    
      for (var i = 0, handle, len = handles.length; i < len; ++i) {
        handle = handles[i];
        if (handle.readable
            && handle.writable
            && handle.server === server
            && handle.remoteAddress) {
          ips.push(handle.remoteAddress);
        }
      }
    
      return ips;
    }
    

    【讨论】:

    • 如果我保留一个对象并添加/删除与仅使用 MySQL 相同的事件,然后在连接时 -> 添加,在断开连接时 -> 删除。所以没有必要真正保持用户的全局对象吗?用户真的有什么方法可以退出/关闭网站而不提醒断开事件吗?
    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 2019-11-13
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2015-03-01
    • 2013-07-07
    • 2011-05-26
    相关资源
    最近更新 更多