我正在制作聊天应用程序,我希望监控哪些用户在线以及哪些用户已离开。 当用户加入Connect时,它会将自己的IP以及用户名等添加到mysql用户在线表中。 当用户离开Disconnect时,它将从用户在线删除他的IP。
如果出现任何不可预测的情况,我想获取当前连接到服务器的客户端的所有IP地址,并将其与表中的客户端进行比较,然后对哪些客户端连接以及哪些客户端不连接进行排序。
那么如何获取连接客户端的ip列表呢?
我想使用MySQL和表的原因是因为我想监视外部PHP站点当前有多少用户在线。如果有更好的方式我愿意接受建议。
答案 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;
}