16

定期的に変更をポーリングすることでこれを実行できることを私は知っています。そして、これはAJAXによって実現できます(たとえば、jQuery.load()と一緒に使用しますsetInterval())。

しかし、これを行う他の方法があることを知りたいですか?他のより安価な方法またはより効率的な方法?素晴らしいチャットクライアントが従うロジックは何ですか?入力を開始するとすぐに、もう一方の端は入力していることを認識します。

賛成票の数を更新したり、ページを更新せずに編集が行われたことなどを示すために、stackoverflowでここでどのようなメカニズムに従いますか?

4

1 に答える 1

25

クライアントとサーバーの同期を(ほぼ)リアルタイムで維持することになると、すぐに頭に浮かぶことが3つあります。

  • 長いポーリング:これについてはすでに説明しました。クライアントにタイマーが設定されており、10秒ごとに新しいAJAXリクエストがトリガーされます。これはおそらく3つの中で最も「ローテク」であり、最も効率が悪いです。しかし、それは最も互換性もあります(つまり、IE6 / 7のようなものでもすべてのブラウザーで動作します)

  • WebSockets:sdespontはすでにコメントでこれについて言及しています。WebSocketはロングポーリングよりも効率的ですが(双方向のクライアント/サーバー通信を無期限に開いたままにするため)、サーバーから定期的に更新を取得するだけの場合は、非常に手間のかかるソリューションになる可能性があります。FirefoxとChromeのすべてのバージョンがそれをサポートし、IEはIE10でサポートを追加しました

  • サーバーから送信されたイベント:これはあまり人気がないようです(またはあまり知られていないようです)。これにより、サーバーはクライアントに変更を送信できます(ロングポーリングの場合のように、クライアントがサーバーに変更を要求するのとは対照的です)。これも一方向の通信(サーバー->クライアント)であり、要求が完了すると接続が閉じられます(双方向通信が開いたままのWebSocketとは異なります)。繰り返しになりますが、すべてのブラウザがそれをサポートしているわけではなく、IEはまったくサポートされていません

これは、クライアント/サーバー通信のより現代的な方法の違いを説明する良い記事でもあります。また、サーバーから送信されたイベントに関する詳細情報が必要な場合は、これを参考にしてください。

于 2012-12-28T14:22:44.033 に答える