3

indy 10 (ブロッキングモード) で簡単なクライアント/サーバーチャットプログラムを書いていますが、どうすれば接続を管理できるのでしょうか? たとえば、サーバー上でオンラインになっているユーザーを想像してみてください。将来のリクエストのために接続トンネルを作成する必要があります。つまり、ユーザーがオンラインの場合、サーバーは今後のユーザー要求に対してユーザー名とパスワードを必要としません。ユーザーが来たときに作成したトンネルで行われます。

どのように接続を管理できますか?

[下手な英語で申し訳ありません] わからない場合は、新しい投稿を送信してください agian .

ありがとうございました

4

3 に答える 3

3

質問で説明されているシナリオでは、実際に行う管理はあまりありません。リクエストごとに再認証する必要がないようにするには、単純に接続を閉じないでください。特にチャット サーバーでは、各参加者が接続を確立し、チャット中は同じ接続を使用し続ける可能性が非常に高くなります。

Indy サーバー オブジェクトは、開いている接続のリストを既に保持しているため、チャット メッセージを他の参加者にブロードキャストしたい場合は、そのリストを反復するだけで済みます。

于 2010-07-02T15:32:22.970 に答える
1

1 秒あたり 100000 回のチェックは、10000 回の永続的な TCP 接続よりもリソースの消費が少ないと思います。とにかく、これらの 100000 個のコマンドを何らかの方法で処理する必要があるため、これらのチェックがボトルネックにはなりません。

代わりに UDP メッセージを使用してみてください。たとえば、ほとんどの MMO ゲームは TCP 接続と UDP 接続の両方を使用します。重要なデータには TCP のみ、その他のデータには UDP を使用します。あなたの場合、UDPは受け入れられるようです。クライアントはいくつかの自動インクリメント ID を含む UDP パケットを送信でき、サーバーは受信していない ID のリストを定期的に送り返すことができるため、クライアントは ID を再送信できます。

于 2010-07-02T15:59:47.800 に答える
0

1 つのオプションは、クライアントがログインする場合、サーバー側で一意のセッション ID (または「トークン」) を作成することです。たとえば、GUID です。そして、すべての要求で、クライアントはこのトークンを含めます。

サーバーは、クライアント セッションと関連するセッション データのリストを維持し、このリストでトークンを検索します。

クライアントがインターネットから一時的に切断されていても、まだそのトークンを認識している場合でも、アプリケーションは再接続してサーバーとのセッションを継続できます。

于 2010-07-02T11:54:08.427 に答える