通常、あるクライアントから別のクライアントに JSON を送信すると、正常に動作します。ただし、クライアントが 1 つしかない場合でも、パケットを送信します。私の解決策は(サーバー側で、node.jsで)することでした:
var clients = io.sockets.clients();
if(clients.length > 1){
// send stuff to other client
}
しかし、そうすると、非常に奇妙なことが起こります。クライアントを開き、if ステートメントでアクションを開始します。送信前に JSON を出力するコンソールは何もしません。クライアントが 1 つしかないためです。別のクライアントを開いて if ステートメントの実行中にアクションを開始すると、コンソールは JSON を出力し、それを別のクライアントに送信します。ただし、最初に開いたクライアントに移動して、if ステートメントでアクションを開始すると、コンソールには何も出力されず、何も送信されません。なんで?if ステートメントを次のように変更してみました。
if("hello" === "hello"){
// do the same stuff as before
}
両方のクライアントが互いに JSON を送信できましたが、if ステートメントを変更したため、一方のクライアントが開いていると、依然として無駄なパケットを送信していました。明らかな理由から、最適な状況は、1 つのクライアントでパケットを送信せず、複数のクライアントで適切にパケットを送信する場合です。
それが明確だったことを願っています。そうでない場合は申し訳ありません。
必要に応じて、さらにコードを投稿します。
編集:
配列を更新するコードは次のとおりです。
var clients = io.sockets.clients();
io.sockets.on("connection", function (socket) {
clients.length++;
socket.on("disconnect", function() {
clients.length--;
console.log(clients.length + " clients are connected");
});
console.log(clients.length + " clients are connected");
});