Facebook でのチャットなどのリアルタイム メッセージの機能を実装したいのですが、いくつかの質問で混乱します
。 Ajaxの、そうですよね?
2. ソケットを使用する場合、TCP または UDP のどちらのプロトコルを選択すればよいですか?
3. 私が TCP を使用していると仮定すると、サーバーは失われたパッケージを再送しようとし続けるので、多くのオーバーヘッドがかかりますか?
4. サーバーとクライアント間の通信でネットワークに障害が発生した場合はどうなりますか? ソケットは自動的に閉じますか、それともいくつかの種類のネットワーク条件に対処する必要がありますか?
誰でも助けることができますか?
1 に答える
WebSocket を使用できます。XMLHttpRequest は、リアルタイムではないため、現在はおそらく廃止されていますが、WebSockets をサポートしていないブラウザーを使用しているユーザーには、XMLHttpRequest を使用するようにフォールバックできます。
送信している情報が送信された時点でのみ有効な場合は、UDP を使用します。たとえば、プレイヤーの位置になるゲームなどです (5 秒前の位置を受け取る必要はありません)。また、WebSocket で UDP を使用することはできません。
それ以外の場合は、TCP を使用します (p2p を実現するためにホール パンチングを行う場合を除きます)。データの損失はおそらくあなたにとって悪いことであり、TCP がそれを処理します。
通信の失敗が許容できる場合を除き、UDP を使用して失われたデータを手動で確認して再送信する必要があります。
IOException が発生します。接続が不適切に閉じられた場合、必要に応じて変更できる無応答のタイムアウト後に例外がスローされます。これは、TCP を使用することを前提としています。それ以外の場合は、受信した (または受信しなかった) 応答/データに応じて、クライアントが接続または切断されたと考えるときに、自分で把握する必要があります。