2011-07-25 12 views
2

私はnode.jsを使って複数のクライアントを持っています。さて、私のコードでは、ポートでリッスンしています。クライアントが接続するたびに、他のすべてのクライアントにブロードキャストメッセージを送信したいと言います。新しいクライアントが接続するたびに新しいイベントを起こしています。私は彼に返信しています。私がresponse.end()と言うと、その後、その特定のクライアントに何も送ることができません。しかし、ブラウザはロードを続け、response.endを待っています。 を使用していないはsocket.ioを使用していませんか。 私はsocket.ioがその用途を持っていることを知っていますが、私はsocket.ioなしでそれを行うことができるかどうか本当に知りたがっています。node.jsのresponse.endで接続が失われました

答えて

0

クライアントで2つのチャネルを使用するとします。 1つは更新を受信し(チャネルは開いたままにしておくか、または頻繁に更新を問い合わせる)、1つはデータを更新します。クライアントとサーバーを再構成するための作業が必要ですが、2つのチャネルを使用することが問題を解決する最もクリーンな方法だと思います。

+0

速い返答をいただきありがとうございますが、どちらの方法でもresponse.end()を指定する必要があり、毎回接続が終了するようです。だから、私はそれ以降にクライアントにメッセージを送信することはできません。私がnode.jsの代わりにリフレッシュし続けると、通常のサーバーとクライアントが毎回ポーリングしていて、それから右にポーリングすることができますか?だから私はそれを避けようとしている。 2つのチャンネルで、すべてのクライアントが両方のチャンネルにあることを意味しますか? – wittythotha

0

.end()を送信しないと、ブラウザは待機し続けます。しかし、あなたがチャンネルを閉じると、それを何も送信することはできません。ですから、socket.ioを使用するか、XHR経由でチャンネルを開き、各クライアントがメッセージを受信できるように開いておいてください。メッセージを適切にフレーム化する(あなたのアプリケーションプロトコルを実装する)のはあなた次第です。私はポールが正しいと思います。

+0

そうですね、あなたが言ったようにXHRを使ってそれをやろうとしています。しかしXHRについても、私はちょうど接続=キープアライブ権利を言うだろうか? XHRを使用して開くためにどこに指定する必要がありますか? – wittythotha

+0

接続:keep-aliveは接続を開くことを指定するヘッダですが、jQueryを使用している場合は、すでに設定されていると思います。 – Claudio

0

長いポーリングを試してください。これは、サーバーが何かを送り返すまでブラウザから「ahax」リクエストを「ハング」させることを意味します。

How do I implement basic "Long Polling"?

nodejsを使用して、簡単にクライアントの応答オブジェクトを格納することができます。