、この接続(Socket.on('data',...)
)から来るたびにData
は、サーバーがData
からUserID
を取り出し、このUserID
とソケットがClientList
に存在し、そうでない場合はどうかを確認するために、ClientList
(ソケットオブジェクトの配列)をチェック:追加しますUserID
をSocket
のプロパティとして追加し、Socket
オブジェクトをClient list
に追加します。 IDを持つユーザーは= 1がID = 2、右Socket
を探し、見つかったSocket
にユーザ1のメッセージを送信するためにClientList
でユーザーID = 2とソケット用 サーバーの検索(ユーザーとユーザーにメッセージを送りたいのでNodeJsソケットの処理方法とソケットの管理方法は? (socket.ioを使わないで)効率的な方法は何ですか?サーバーへの接続後
2のソケット)。
socket.io
を使用せずにこれを達成しようとしています!それは私の雇用主が私にしたものです! :))
今私の質問です:私はこの権利をしていますか?このUserID
がClientList
に存在するかどうかを確認するのに、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 + ').');
}
});
});
UPDATE:
がClientList
に毎回Data
を見て、この効率的であるがreceiverIDをチェックするために、サーバーに来ている(存在受信機のClientList
を更新する場合は、現在の接続UserID
が存在しますか?
新しい接続(ユーザ)を管理し、のサーバに保存する方法は、ユーザ数が何千人も何百万人の場合でもを使用してください。どのようにsocket.io
これを行うのですか?
以降の使用法は次のようになります。彼/彼女がある場合
1人の特定のユーザーがオンラインであるかどうかを確認するためのチェック(
ClientList
内のオブジェクトを持っている)は、ユーザーにリアルタイムメッセージを送信しますオンライン
など。 。 。
mqttやrabbitmqのようなメッセージキュー技術を試してください。 – Jain
@Jainあなたの提案に感謝します。しかし、 'ClientList'部分の検索はどうですか? 'mqtt'を使ってその部分を削除していますか?私は私の質問を更新しました。 –