Node.js - 获取所有连接的客户端IP地址列表?

时间:2014-10-22 14:19:32

标签: mysql node.js express socket.io

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

如果出现任何不可预测的情况,我想获取当前连接到服务器的客户端的所有IP地址,并将其与表中的客户端进行比较,然后对哪些客户端连接以及哪些客户端不连接进行排序。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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;
}