2012-04-22 5 views
1

通常、あるクライアントから別のクライアントにJSONを送信すると、正常に動作します。しかし、クライアントが1つだけの場合でも、パケットは送信されます。私の解決策は、(Node.jsの中に、サーバー側で)にした:クライアントとのジレンマclients.length(clients === io.sockets.clients();)

var clients = io.sockets.clients(); 

if(clients.length > 1){ 
// send stuff to other client 
} 

をしかし、私はそれを行う際に、非常に奇妙な何かが起こります。私はクライアントをオープンし、ifステートメント中にアクションを開始し、送信する前にJSONを印刷するコンソールはクライアントが1つしかないので何もしません。別のクライアントを開いてifステートメント中にアクションを起動すると、コンソールはJSONを出力して他のクライアントに送信します。しかし、私が最初のクライアントに行き、if文でアクションを起動して踏み込んだ場合、コンソールは何も出力せず、何も送信しません。どうして?

if("hello" === "hello"){ 
// do the same stuff as before 
} 

をし、両方のクライアントが相互にJSONを送ることができますが、私はまだ役に立たないパケットを送信し、オープン1つのクライアントで、if文を変更していたので、私は言ってif文を変更してみました。明らかな理由から、最適な状況は、1つのクライアントでパケットを送信せず、複数のパケットで適切にパケットを送信する場合です。

私はそれがはっきりしていたことを願っています。

私が必要な場合は、コードを投稿します。

EDIT

ここでは、配列を更新するコードです:

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"); 
}); 
+0

これは、最初のクライアントを一度開くと発生します。明確にするために、第2のクライアントを開いた後に最初のクライアントをリフレッシュすると、それが私の行うことである – Matt

答えて

0

は多分これが偽で、最近どんなnote.jsを行っていません。しかし、私は考えました。クライアントの変数は、クライアントが接続するときに定義され、後で更新されないことがあります。これは私にとって論理的なことです。私はあなたがする必要があると思う:新しいクライアントが接続すると、すべてのクライアントにイベントを発生させ、 "クライアント"変数を更新します。

+0

に固定されます。コードを掲示したので、コード – Matt

+0

を投稿します。 – Matt

+0

@freakishsの答えが私よりも理にかなっていると思います。私はクライアントのインスタンスを別々に考えていましたが、インスタンスはおそらく1つしかありません。 –

0

は、私は(これは何:配列の長さ??のclients.length++ ??インクリメント)はあなたのコードがどのように動作するかわからないが、この「通常」の方法やってみてください:保持せずに(

var clients; 

io.sockets.on("connection", function (socket) { 
    clients = io.sockets.clients(); 
    socket.on("disconnect", function() { 
     clients = io.sockets.clients(); 
     console.log(clients.length + " clients are connected"); 
    }); 
    console.log(clients.length + " clients are connected"); 
}); 

またはより良いを接続しているユーザーへのグローバル参照):

function get_clients() { 
    var clients = io.sockets.clients(); 
    console.log(clients.length + " clients are connected"); 
} 

io.sockets.on("connection", function (socket) { 
    socket.on("disconnect", function() { 
    get_clients(); 
    }); 
    get_clients(); 
}); 

io.sockets.clients()は(あなたがこの奇妙な振る舞いを取得する理由を、おそらくそれはだ)、それを呼び出した瞬間に全て接続しているクライアントの配列を返すため。

+0

はい、それをif文に入れても、まだ問題が残っていました:( – Matt

+0

新しいクライアントが接続されたときに各クライアントがio.sockets.clients()の長さを要求できるようにすることはできますか? –

+0

@Matt文の使用方法を正確に記述できますか? – freakish