2

複数のサーバープッシュを実装する最良の方法は何ですか?

ユーザーのステータスを更新したいだけなので、定期的にサーバーをポーリングして 1000 ミリ秒程度でステータスを確認し、ページを更新できます。

私が見つけることができるもう1つの方法は、サーバーが30秒ほど待機し、変更があったかどうかを確認し、見つかった場合、サーバーがクライアントに応答をプッシュし、ページを更新してから別のポーリングを行うことです。

しかし、これをどのように実装して、Web サイトで 10 個ほどのことをチェックするのでしょうか? たとえば、誰かが投票したときにstackoverflowに質問の投票を更新させたい場合、私が考えることができる唯一の方法は

サーバーに各質問の投票を求める -> サーバーはページ上のすべての質問の投票で応答します

しかし、どの質問の投票が変更されたかを確認するにはどうすればよいですか? 現在のすべての投票を送信してから、サーバーに値を比較させ、変更されたもののみを返信させることもできますが、30 の値をチェックしながらこれを行うのは非常に効果的ではないと思います。

すべての例の 1 つはFacebookで、ほとんどすべてがサーバー プッシュによって更新されますが、サーバーは何が変更され、何が変更されなかったのかをどのように確認できるでしょうか?

私が見つけたすべてのもの (私の本「Ajax Patterns」を含む) は、1 つの値をポーリングする方法のみを説明していますが、一度に多くの値 (10 以上など) をポーリングする方法は見つかりませんでした。

4

2 に答える 2

2

セッションを使用する準備ができている場合、最も簡単な方法は、シリアル リクエスト ID を取得し、サーバーがセッションでクライアントに送信された最新の情報を追跡できるようにすることです。次に、クライアントは、最後に更新したときよりも新しいデータがあるかどうかを尋ねます。

例: クライアントが何も変更されていない後に ajax リクエスト #5001 を送信すると、サーバーは「false」と応答する可能性があります。その後、誰かがメッセージを投稿するか、なんらかの変更があり、リクエスト #5002 でサーバーは変更された要素のリストを送信します (これらが何であれ)。次に、リクエスト #5003 では、リクエスト #5002 以降何も変更されていないため、再び false と応答します。

これには、JSON クライアント/サーバー アーキテクチャが最適です。オブジェクト階層/マップを簡単にシリアル化できます。私はjavascriptでクライアントにjQueryを好み、サーバー側は簡単に吐き出すことができます。

于 2009-06-08T22:35:24.347 に答える
0

サーバー側でデータにリビジョン番号をタグ付けして、クライアントがデータのリビジョンを認識できるようにすることをお勧めします。クライアントが一連のリビジョンを送信できる複合クエリを作成し、サーバーがそのリビジョンのリストに、更新されたリビジョンで応答できるようにします。このように、クライアントは更新があるかどうかを確認するために 1 つのサーバー クエリのみを作成します。クライアントが関心のあるすべてのデータを 1 つのクエリにまとめているだけです。この方法には、クライアントが関心のあるデータ セットを変更できるという利点もあります。サーバー側の実装が十分に柔軟であれば、すべての動的データのニーズに対して同じ実装を使用できます。

于 2009-06-08T18:59:13.783 に答える