サーバー側イベントのサポートを CppCMS に追加する予定です。通信レベルで何をすべきかの技術的な部分を理解しています。クライアントは長いポーリング XmlHTTPRequest を送信し、応答を待ちます。サーバーは接続を受け入れ、サーバー側のイベントが発生してクライアントに応答を送信するまで応答しません。クライアントは手順を繰り返します。
ただし、これはほとんどの Web 開発者にとって「低すぎる」レベルです。イベントの管理方法、接続の管理方法など、多くの質問があります。
私は2つの可能なモデルについて考えました:
定義されたいくつかの名前付きイベントとサーバー側があります。たとえば、「チャット ルーム 134 番の新しいメッセージ」です。リクエストが受け入れられると、サーバー側アプリケーションはルーム (DB など) 内のメッセージをチェックし、クライアントへの新しいメッセージがない場合は、イベントにサブスクライブして待機します。
他のクライアントがサーバーにデータを投稿すると、「チャット ルーム 134 番の新しいメッセージ」イベントですべてのアプリケーションに通知し、それらが起動してこれらのメッセージをクライアントに送信します。
このモデルは依然として「低レベル」モデルのように見えますが、すべての通知メソッドが隠されています。
もう 1 つのオプションは、いくつかの名前付きキューを定義することです。これにより、各クライアントはサーバーへの接続時にそのようなキューを作成し、新しいメッセージを待ちます。あるクライアントが「Chat Room no 134」に新しいメッセージを投稿すると、サーバー側では、この「Chat Room no 134」に接続されているすべてのキューにメッセージがブロードキャストされ、メッセージがクライアントに配信されます。
しかし、次のような多くの疑問が生じます。
- 単一ページのレベルでキューとセッション レベルを管理するにはどうすればよいですか?
- キューを削除してタイムアウトを作成するにはどうすればよいですか?
- 複数の「ウィンドウ」が同じキューにサブスクライブするとどうなりますか?
サーバー側のイベントとユーザー側のイベントを結び付ける永続オブジェクトをサーバー側に作成します。リダイレクトされた個別の XHR リクエストを介して通信する場合があります。
そのため、クライアント (JavaScript) はイベントを登録し、ページが再構築されるまで、XHR およびサーバー側でディスパッチされたイベント通知でイベントを待機します。
では、サーバー側のプッシュ テクノロジの背後にある最も一般的で推奨される API モデルは何ですか?
ありがとう
編集:3番目のオプションを追加