WebSocketのチャットインタフェースの使用、およびいくつかの移動端の穴(上)を踏む

1749 ワード

最近、モバイル端末とpc端末を含むカスタマーサービスページが開発されています.主にWebSocketを用いてバックグラウンドとチャット通信を行う(もちろんWebSocketと互換性がないのはポーリング方式)!
一、WebSocketはhttpポーリングの長所と短所に比べて?
メリット
  • websocketは、フロントエンドがずっとhttpリクエストを送信してバックグラウンドに問い合わせ、カスタマーサービスにメッセージの返事があるかどうかを尋ねる必要はありません.同様に、お客様のネットワーク帯域幅とコンピューティングリソースも削減されます.

  • 欠点
  • 各ブラウザの互換性が不一致であり、サーバの長期的な接続維持には一定のコストがかかります.
  • WebSocketは文字列
  • しか転送できません.
    二、WebSocket API紹介
    詳細なAPIはMDNを見ることができますが、ここでは私がプロジェクトで使ったものだけを紹介します.https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket
  • WebSocketは、websocketリンク
  • を作成することに相当する構造関数であるnew WebSocket('ws://localhost:8080')に相当する.
  • WebSocket.readyStateWebSocketの接続状態を傍受する、
  • 0は、
  • が接続中であることを示す.
  • 1は、接続され通信可能であることを示す
  • .
  • 2は、接続を閉じる
  • を示す.
  • 3は、接続が閉じるか、接続が失敗したことを示す
  • である.
  • WebSocket.onopen接続が成功すると、この方法
  • に進みます.
  • WebSocket.onerror接続失敗コールバック関数
  • WebSocket.onclose接続閉じたコールバック関数
  • WebSocket.onmessageサーバがメッセージをプッシュした後のコールバック関数
  • .
  • WebSocket.close()現在の接続
  • をアクティブに閉じる.
  • WebSocket.send()バックグラウンド
  • にメッセージを送信する.
    三、WebSocket運用中の注意事項(後で実現方式を単独で書く)
  • Websocketは、サーバが接続を切断したかどうかを監視するために、バックグラウンドとpingpongの心拍保持を実現する必要がある.
  • WebSocketは、モバイル側では多くのシーンで接続が切断されるため、websocketの切断と再接続の機能を実現する必要があります.
  • WebSocketメッセージを送信した後、バックグラウンドが受信するか、第三者に送信するかは、(パブリッシュ購読モードを使用する)フロントエンドでメッセージを送信するときにuuidを持参し、このuuidを購読するメッセージ確認メカニズムを実現する必要があり、バックグラウンドが受信すると、このuuidを確認メッセージコマンドバンドに返し、その後、フロントエンドは、以前にサブスクリプションで受信したコールバックに基づいてメッセージ確認の論理を書くことができます.