连接到服务器后,每次Data
来自此连接(Socket.on('data',...)
),服务器都会从UserID
获取Data
并检查ClientList
( Socket对象的数组),以查看UserID
中是否存在包含此ClientList
的Socket,如果不存在:添加UserID
作为Socket
的属性,然后添加Socket
} object to Client list
。
因此,当ID = 1的用户想要向ID = 2的用户发送消息时,
服务器在ClientList
中搜索具有UserID = 2的Socket以找到正确的Socket
并将用户1的消息发送到找到的Socket
(用户2的套接字)。
我试图在不使用socket.io
的情况下完成此任务!这就是我的雇主让我做的事情! :))
现在我的问题是:我做得对吗?检查ClientList
数组(每次连接发送数据时)以查看UserID
中是否存在ClientList
这是否有效?如果没有,那么正确有效的方法是什么?我的代码没有问题,它的工作原理。但如果有成千上万的连接呢?
任何示例代码,示例或链接都将受到赞赏。谢谢。
这是伪代码:
var net = require('net');
var Server = net.createServer();
var myAuth = require('./myAuth');
var ClientList = [];
Server.on('connection', function(Socket){
Socket.UserData = {}; // I want to add user data as a property to Socket
Socket.on('data', function (Data) {
var userID = myAuth.Authenticate_and_getUserID(Data);
if(userID != undefined){
var found = false;
ClientList.filter(function(item){
// check if Socket is in ClientList
if(item.UserData.ID == userID){
// client was connected before
found = true;
}
});
if(!found){
// this is a new connection, Add it to ClientList
Socket.UserData.ID = userID;
ClientList.push(Socket);
}
}
Socket.once('close', function(has_error){
var index = ClientList.indexOf(Socket);
if (index != -1){
ClientList.splice(index, 1);
console.log('Client closed (port=' + Socket.remotePort + ').');
}
});
});
更新澄清:
每次ClientList
来到服务器,检查receiverID(接收者的存在)和使用当前连接更新Data
ClientList
时,有效查看UserID
socket.io
如果不存在?
当用户数量为数千或数百万时,我应该如何管理新连接(用户)并将其存储在服务器中以便以后使用!不是10或100. ClientList
如何做到这一点?
以后的用法可能是:
检查一个特定用户是否在线(在"name":"[\"nine\",\"tweleve\",\"four\"]"
中有一个对象)
如果用户在线
等。 。 。
答案 0 :(得分:1)
其实我做错了!
JavaScript中的数组通过引用传递!因此,每次Socket发送数据时都不需要更新ClientList
。
因此代码更改如下:
var net = require('net');
var Server = net.createServer();
var myAuth = require('./myAuth');
var ClientList = [];
Server.on('connection', function(Socket){
ClientList.push(Socket);
Socket._isAuthorized = false;
// when socket send data for the first time
// it gets authenticated and next time it send data
// server does not authenticate it
Socket.on('data', function (Data) {
var userID = getUserID(Data);
if(Socket._isAuthorized != true){
if(authenticate(Socket)){
Socket._isAuthorized = true;
Socket._userID = userID;
return;
}
}
// do something with data...
}
Socket.once('close', function(has_error){
var index = ClientList.indexOf(Socket);
if (index != -1){
ClientList.splice(index, 1);
console.log('Client closed (port=' + Socket.remotePort + ').');
}
});
});
效率很高!