概要
これの 2 つの側面:
- サーバーに記録する必要があることをしたとき
- 物事を見ているだけで、何もしていないのに物事が更新されていることに気付くと (投票インジケーターが変化し、「この投稿は改訂されました。クリックして読み込みます」、「この質問は閉じられました。これ以上の回答は受け付けません」など)
サーバー側で記録する必要があることを行うとき (例: 投票)
サーバーに ajax メッセージを送信する JavaScript コードです。会話のサーバー側は、好きなテクノロジで実装できます (Web の利点の 1 つであるクライアント側とサーバー側は分離されています)。具体的には、ページには当時のままの投票情報が読み込まれ、投票ボタンをクリックすると、JavaScript コードが投票表示を即座に更新します。、その後、サーバーに ajax リクエストを送信して投票を記録します (したがって、即座に視覚的なフィードバックが得られます)。通常、その要求は適切な時間内に完了し、すべて問題ありません。リクエストの処理中にエラーが発生することがあります (HTTP エラー — たとえば、何かがうまくいかなかった — またはサーバーが投票を拒否した論理エラー)。その場合、エラー メッセージが表示され、コードは投票の表示を元に戻します (サーバーに登録されていないため)。
Stack Exchange の場合、 JavaScript コードでjQueryライブラリを使用しています。これがいかに簡単かを理解していただくために、jQuery を使用した単純な ajax 呼び出しのクライアント側を次に示します。
$.ajax({
url: "/path/to/server/resource",
method: "POST",
data: {action: "voteup"},
success: function(data) {
// Do something with the successful response from the server,
// which can send back data
},
error: function(jqXHR, textStatus, errorThrown) {
// Do something with the error that occurred
}
});
サーバー側は、意味のある方法で POST 操作に応答するだけです。
この例では jQuery を使用していますが、他にもYUI、Closure、 Prototypeなど、ajax を非常にシンプルにする JavaScript ライブラリがたくさんあります。jQuery は、現在 (圧倒的に) ブラウザー ベースの JavaScript タスク用の最も人気のあるライブラリですが、それだけではありません。
物事だけを見ているとき
これについては外部からしか話せませんが、Stack Exchange はいくつかの「コメット」手法 (Web ソケット、ロング ポーリング、 hiddeniframes
など) のいずれかを使用していると思います。
Web ソケットが最初の選択肢だと思います。たとえば、[ネットワーク] タブを開いた状態で Chrome を使用して質問を開くと、へのリクエストが表示されます。これはws://sockets.ny.stackexchange.com/
、Web ソケットに関連付けられたワイヤ プロトコル RFC6455 でカバーされてws
いる2 つのスキームの 1 つですwss
(もう 1 つは、SSL で保護されたバージョンです)。 . Web ソケットの利点は、クライアントとサーバー間の永続的な双方向通信を正式かつ堅牢に許可し、サーバーが必要に応じてクライアントにデータをプッシュできることです。
Web ソケットは、IE9 以前の明らかな省略により、現在かなり十分にサポートされているため、SE はおそらく、上記のリンクに記載されている古い手法の 1 つまたは複数にフォールバックして、それらを持たないブラウザーに対応します。