1

AOL や ICQ などに似たシンプルな Windows P2P インスタント メッセンジャーを C#で開始したいのですが、はるかにシンプルです (2 人の男性間のプレーン テキスト メッセージ)。

それを行う方法の例は必要ありません。私はそれらを自分で見つけることができます。

私が必要としているのは、多くの技術的な詳細がなくても、インスタント メッセージング (マルチチャットではなく P2P) がどのように機能するかについての一般的な考えです。

例えば:

  • user1 と user2 の間の通信を行うためにメイン サーバーが必要ですか、それとも user1 が文字列を直接 user2 に送信できますか? これはどのように呼ばれますか?

  • user1 がログインしている場合、別のユーザーからの受信メッセージ (または友人のオンライン ステータス) をどのように知るのでしょうか? チャット クライアント アプリは X 秒ごとにメイン サーバーをチェックしますか?

一般的なデータ フローのアイデアを明確にするのに役立つ手がかりは、非常に高く評価されます。共有するフローチャートが見つかった場合は、フローチャートも役立ちます。

前もって感謝します。

更新 (新しい質問) - 7 月 6 日

ユーザーが正常にログインし、アプリが連絡先のリストを取得して入力する必要があるとしましょう (私の apache/php/mysql サーバーに保存されています)。

  • データの取得 (重要)とその後の連絡先リストの作成をどのように実装しますか? WebClient.DownloadString[Async] は良いアプローチですか? より良い方法はありますか?

  • アプリが更新されたリスト (オンライン/オフライン ステータス) をチェックする頻度。推奨事項は受け入れられました。

  • C#.NET (Visual C# Studio 2010) で JSON データを解析するにはどうすればよいですか? JSON 文字列を取得します。

ありがとう!

4

1 に答える 1

2

本当に p2p アプリを構築したいのであれば、サーバーは必要ありません。ただし、これは簡単ではありません。

チャット システムを作成するにはさまざまなアプローチがあり、主にサーバーが関与します。コメット (適切に実装されている場合は優れたソリューションであり、そうでない場合はひどいソリューション)、ポーリング (x 秒ごとにチェックする)、またはソケットの使用を研究しますが、考慮すべき問題がたくさんあります。また、注意事項、特にファイアウォール/nat ルーターがあります。ソケット ソリューションは「p2p」になる可能性がありますが、ポーリングとコメットはそうではありません。

あなたのユースケースでは、単純なソケットソリューション(一方をサーバーとして、もう一方をクライアントとして)を使用し、サーバー側でポートを開いてルーターファイアウォールを構成します。

これを拡張して、両側がサーバー (ポートでリッスンする) とクライアントの両方になるようにすると、お互いに「呼び出す」ことができます。

これを適切に機能させるには、永続的な IP を取得するか、dyndns などのサービスを使用する必要があります。

アップデート

はい、DownloadString または DownloadStringAsync は適切な方法です。どのくらいの頻度で本当にあなた次第です。ご質問の内容から、これは一部のユーザーのみを対象としていると思われますので、サーバーの過負荷について心配する必要はありません。1 分に 1 回は合理的に聞こえますが、そのように感じている場合は、おそらく 1 秒に 1 回でも問題ないでしょう... .NET で JSON を解析すると、最終的なクエリに回答します。

于 2011-07-04T09:00:49.870 に答える