1

さまざまな種類のクライアントを区別するためにいくつかの名前空間を使用するアプリケーションがあるので、最初からこの方法でそれらを分離します(クラスターを使用して4つのプロセスを生成します)

//server code
io.of("/TYPE_ONE").on("connection", function(socket){
    console.log("Client connected to TYPE_ONE with id:\t"+socket.id+"\t"+process.env.NODE_WORKER_ID);
});

io.of("/TYPE_TWO").on("connection", function(socket){
    console.log("Client connected to TYPE_TWO with id:\t"+socket.id+"\t"+process.env.NODE_WORKER_ID);
});

//client code

//for type one
socket = io.connect("http://mydomain.com/TYPE_ONE", socketOptions);

//different files always, only one type sent to each client

//for type two
socket = io.connect("http://mydomain.com/TYPE_TWO", socketOptions);

コンソールを見た後、突然、1つのクライアントが接続すると、次の出力が表示されます。

Client connected to TYPE_ONE with id:    1234      3
 .
 .
 .
Client connected to TYPE_TWO with it:    1234      3 
(same id and workerId as previous connection)

サーバーへの接続は1つだけだと確信しています。t

何がこれを引き起こしているのだろうか?コードを調べて、メソッドを先ほど示したスタブに簡略化したため、問題が見つからないようです。

ご協力いただきありがとうございます。

4

2 に答える 2

0

コードにエラーはありません。接続が 1 つしかないため、ソケットは 1 つの socket.id で名前空間に接続します。多くの接続を確立する方法がわかりません。接続の 2 つのポートを試すか、サーバーに複数回接続/リッスンする必要があります。

あなたの問題を解決するには、1 つの接続を使用しますが、サイトを強化する方法を考えてください。たとえば、rooms と store in session NEW user id を使用して、どのルームまたは名前空間にユーザーを配置するかを判断します。

「複数の名前空間と複数の部屋が同じ (WebSocket) 接続を共有できます」 socket.io ルームまたは名前空間?

クライアントを区別したい場合は、1 つの名前空間内の別の部屋にテーマを配置し、socket.id でそれらがどの部屋であるかを確認する (または socket.id 名 ( .joind(socket.id)) で部屋に参加する) ことができます。 https://github.com/LearnBoost /socket.io/wiki/ルーム

于 2012-12-07T13:48:09.077 に答える
0

私のコードのある時点で、名前空間に属していたio.of("/TYPE_ONE").socket(socket.id).emit(message); and があったことが判明したため、彼が接続されていない名前空間からソケットにメッセージを送信するたびに、これにより自動的にそれに接続されます言った名前空間。奇妙ですが。socketTYPE_TWO

于 2012-12-07T21:41:56.733 に答える