Javaのlangで純粋なソケットを使ってクライアント/サーバーのインスタントメッセンジャーを実装する必要があります。
サーバは多数のクライアントにサービスを提供する必要があり、使用するソケット(TCPまたはUDP)を決定する必要があります。おかげで、コスタ。
インスタントメッセンジャーのTCPまたはUDPは何が良いですか?
答えて
TCP
理由:
TCP:「転送されたデータはそのまま残り、それが送信されたのと同じ順序で到着したことを絶対的な保証はあり」
UDP:「送信されたメッセージやパケットがまったく届く保証はありません」あなたのチャットメッセージはおそらく失わたいでしょうhttp://www.diffen.com/difference/TCP_vs_UDP
:
はでより多くを学ぶのか?
を編集してください:「大きなチャットプログラム」に関する部分が欠けていました。私は、TCPサーバーである必要があるチャットプログラムの性質のため、UDPプロトコルでユーザーから送信された実際のテキストコンテンツを想像することはできません。
TCPサーバの最大制限は、同時に65536接続です。その番号を実際に通過する必要がある場合は、現在のサーバーの負荷に応じて適切なサーバーに着信接続を送信するディスパッチャサーバーを作成できます。
実際にはメッセージは失われたくありませんが、サーバーが作成できるソケットの制限はありますか?私が理解しているように、TCPは、接続されたすべてのTCPクライアントのソケットを開きます。 – Wizit
大規模なチャットプログラムを実装する予定がない限り、サーバーの負荷制限については心配しません。 TCPサーバーの上限は65536接続です。そして、はい、あなたはすべてのクライアントにオープンな接続を持っている必要があります。 –
メッセージがサーバーに配信されたかどうかをユーザーが知る必要があるかどうかによって異なります。 UDPパケットには固有の肯定応答がありません。クライアントがサーバーにIMメッセージを送信し、そのメッセージが送信中に失われた場合、クライアントまたはサーバーはどちらもそのことを認識しません。
(。短い答えは、「TCPを使う」である...しかし、それはあなた自身のための設計への影響を通じて考える価値がある)
TCPはあなたにインスタントメッセージング中に確かに望ましい信頼性を与えるだろう - あなたをコンバース時にメッセージをドロップすることは望ましくありません。
ただし、グループメッセージングを使用する場合は、mulitcastを使用する可能性があります。そのような場合、UDPはポイントツーマルチポイントを扱うことができるので、UDPは正しいキーオーシーになります。マルチキャストアプリケーションにTCPを使用することは、送信者が複数の受信者の再送信/送信レートを追跡しなければならないので難しいでしょう。 1つの方法として、ポイントツーポイントチャットにTCPを使用し、グループメッセージングにUDPを使用する方法があります。
両方を使用できます。実際のメッセージを交換するには、TCPを使用します(データが失われず、大量のメッセージをストリーミングするなど)(jpegなどが含まれています)UDPは、キューに入れられたメッセージがあるクライアントに短い 'connectNow' UDPの 'connectNow'メッセージは、TCPdisconnectedのクライアントに接続してから移動するように指示します(NotLoggedIn、TCPconnected、TCPdisconnected、LoggedOut)。状態遷移と通常のメッセージ交換イベントを制御します。これはもちろん信頼性が低いため、X秒ごとに 'connectNow'メッセージをN回繰り返すこともできますクライアントが接続するまで。クライアントは、どんな場合でも、毎分X分のポーリングを試みる必要があります。
- 1. MSMQはTCPまたはUDP上で動作しますか?
- 2. Networking Framework for C++(UDPまたはTCP)?
- 3. udpまたはtcpパケットをGoogleトークで使用しますか?
- 4. Python icmpソケットサーバー(tcp \ udpではない)
- 5. なぜTCPでフラグメント化が行われたのですかなぜTCP/UDPでないのですか
- 6. ライブラリはENetと似ていますが、TCPは何ですか?
- 7. TCPとUDPの違い
- 8. UDPまたはTCPパケットの変更を検出する
- 9. 何が良いですか?ファイルシステムのクエリまたはデータベースのクエリ?
- 10. 何が良いですか?ループ内のnotifyDataSetChangedまたはnotifyItemChanged?
- 11. TCPとUDPのスループット
- 12. UDPパケットとTCPパケットの違いは何ですか?あなたはそれらを何のために使うのですか?
- 13. IPアドレスなしのソケット接続(TCPまたはUDP)を作成
- 14. 何が良いですか:int.TryParseまたはtry {int.Parse()} catch
- 15. ハンドラまたはリスナ。何が良いですか?
- 16. 何が良いですか?静的メソッドまたはインスタンスメソッド
- 17. TCPはイーサネット経由のUDPより高速ですか?
- 18. Subject.asObservableとは何が良いですか?
- 19. 非同期/同期およびTCPまたはUDP
- 20. ffmpegのUDPプロトコルとは何ですか?
- 21. RMIレプリケーションでは、キャッシュ複製にTCPまたはUDPを使用していますか
- 22. iptablesフィルタリングのパフォーマンス:TCPとUDP
- 23. Subqueriersのために - 何が良いですか? HQLまたはCriteria -DetachedCriteria
- 24. tcp、udpの良いアイデアの組み合わせを使用してボードゲームサーバー?
- 25. IPヘッダーまたはTCP/UDPヘッダーをチェックする方法は接続されていますか?
- 26. TCPソケットとUDPソケットの違い
- 27. 単純なマルチプレイヤーゲームのためのTCP/IP上のUDPまたはHTTP
- 28. 何が良いですか?javascript:functionName()またはfunctionName()だけですか?
- 29. Java:サーブレットを使用したTCP/UDPホールパンチ?
- 30. リアルタイムTCP/IPゲームサーバーの良いホストは誰ですか?
それはあなたのreqユーレメントはある。お客様が私たちに与えた唯一の要件である「多数のクライアント」は、基本的に意味がありません。なぜなら、800人のクライアントを「多数」または16,000人と考えるかどうかわからないからです。 –
同じ時間に何万人ものクライアントになる可能性があります – Wizit