2

私は Mojolicious と websockets について独学しています。これまでのところ、データベースからの行を表示する Web ページがあり、行を追加、削除、更新するためのボタンと、並べ替えのために列を選択するためのボタンがあります。

現時点では、各ボタンの javascript 'onclick' ハンドラで 'one-shot' websockets を使用しており、それが機能します。

ソケットを有効に保ち、複数回のクリックに使用するために、Websockets の意図に沿ったものになるでしょうか? そうしないと、ユーザーがボタンをすばやく数回クリックすると面倒になるため、答えは「はい」にする必要があると思います。

また、スタイルの問題として、ブラウザーとサーバー間のさまざまなタイプの対話を処理する Websocket を 1 つだけ持つべきですか、それともタイプごとに別々の Websocket を持つべきでしょうか? Websocket が 1 つの場合、メッセージを分析し、メッセージをどう処理するかを決定するためのコードが必要になります。いくつかの websocket はそれぞれより単純ですが、それにはエラー処理コードなどの繰り返しが必要になります.

言葉が多く哲学的な質問であることは承知していますが、アプリケーションをさらに開発する前に、アプリケーションの全体的な形を把握したいと考えています。

4

2 に答える 2

3

Ajax 呼び出しは、クライアントがサーバーから特定の情報をワンショット タイプのアプローチで要求するための効率的な方法です。

WebSocket は、クライアントからサーバーへの急速な通信を行っている状況 (非常に多くの要求が永続的な接続の恩恵を受ける) や、サーバーが自由にクライアントにデータを送信できるようにする場合に最適です (サーバーからクライアントに直接データを送信するには、永続的な接続が必要です)。

クライアントからサーバーへのデータの不定期の要求にワンショット webSocket (webSocket を作成し、それを使用してから閉じる) を使用することは、最適な方法ではありません。両端が webSockets をサポートするかどうかをネゴシエートし、プロトコルを http から webSocket に変更することに同意するため、ajax 呼び出しには存在しません。

ワンショット webSocket 接続は次のようになります。

  1. クライアントはサーバーへの TCP ソケットを確立します
  2. クライアントは、webSocket アップグレード ヘッダーを含む最初の HTTP 要求を送信します
  3. サーバーは、webSocket プロトコルにアップグレードしても問題ないと応答します
  4. クライアントがメッセージを送信
  5. サーバーはメッセージを受信し、応答を送信します
  6. クライアントが応答を受け取る
  7. クライアントが TCP 接続を閉じる

Ajax 呼び出しは次のようになります。

  1. クライアントはサーバーへの TCP ソケットを確立します
  2. クライアントが HTTP リクエストをサーバーに送信する
  3. サーバーはリクエストを受け取り、レスポンスを送信します
  4. クライアントが応答を受け取る
  5. クライアントが接続を閉じる

また、ブラウザーでコーディングする場合、Ajax 呼び出しは (ワンショット リクエスト用に設計されているため) 自動的に閉じられるため、クライアントは最後のステップをコーディングする必要さえありません。


そのため、エンド ユーザーのクリック時にサーバーから何らかの情報を要求するだけの場合は、Ajax 呼び出しがより効率的な (そして実装が簡単な) アプローチであると思われます。

于 2015-01-29T03:53:31.247 に答える