1

JavaScript で書かれた株式相場表示のような Web ページを作成しています。ページが通信するサーバーも C++ で作成しています。

単一のサブスクリプション メッセージをアプリ サーバーに送信し、キープアライブ接続を開いたままにし、アプリ サーバーからプッシュされたインバウンド データを常に受信するように、Web ページを効率的にしたいと考えています。

現時点では、サーバーからデータを受信するたびに、Web クライアントのサブスクリプション コールを再発行する必要があります。問題は、XHR オブジェクトが readyState(4) に到達するたびに、呼び出しが事実上完了してしまうことです。これ以降に Web ページに到着するデータはすべて無視されます。Web クライアントはデータを再送信でき、それによってオブジェクトがリセットされますが、送信は不要であり、XHR オブジェクトをリセットするためにのみ使用されています。

どういうわけか既存の XHR オブジェクトをリセットし、より多くのデータが Web ページにプッシュされたときに Web ページが応答して処理できるように、より多くのインバウンド データを期待する状態にすることができるかどうかを知りたいです。

ご協力いただきありがとうございます。注: このプロジェクトでは JQuery を使用していません。

4

2 に答える 2

1

特に、 Websocket トランスポートのさまざまなブラウザーの実装を単一の API (WS、JSON、JSONP、Flash、および Long Polling) にカプセル化するsocket.ioのようなライブラリーを調べることを強くお勧めします。

Socket.io クライアント ライブラリは、すべての主要なブラウザーでサポートされるようになりました。唯一の課題は、C++ 固有のサーバー実装を見つけることかもしれません。うまくいけば、このSOの質問が役立つかもしれません

それ以外の場合、他の唯一のオプションは、クライアントでのロングポーリングまたはコメットであり、スケーリングする適切なサーバー側実装を備えています (つまり、接続ごとのスレッドアーキテクチャではなく、NginX のようなイベント駆動型サーバーのようなものです)。

あなたが C++ に熱心に取り組んでいることに感謝しますが、私の謙虚なアドバイスは、Node.js を調査することです.

HTHとすべての最高。

于 2012-12-17T14:09:14.577 に答える
1

HTTP は 1 回限りのプロトコルです。1 つの要求、1 つの応答で完了です。接続を開いたままにしたい場合は、Websockets ( MDN リファレンス ページクライアント側のコード例) を使用できます。ただし、古いブラウザーではサポートされないことを考慮してください (たとえば、IE はバージョン 10 で Websockets のサポートを開始したばかりです)。おそらく、XHR とlong-pollingを使用してフォールバックを実装する必要があります。

于 2012-12-17T14:10:09.750 に答える