0

私は10台のクライアントと2台のサーバーを備えた非常にシンプルなアプリを持っています。各クライアントは、10秒ごとに両方のサーバーにハートビートを送信します。また、数分ごとに、外部イベントによってトリガーされ、サーバーのTIdCmdTCPServerに別の文字列を送信して、応答を待つ場合もあります。

私はネットワーキングの初心者です。問題を単純にするために、(システムが非常に単純であるため)ブロッキング呼び出しを行いたいと思います-クライアントはサーバーにメッセージを送信してブロックし、応答(またはタイムアウト)を待ちます。

それをしてもいいですか?または、メッセージをバッファリングし、クライアントで応答(またはタイムアウト)を待ってから次のメッセージを送信する必要がありますか?

Windows 7 pro、Indy 10、Delphi XE2

4

1 に答える 1

2

IndyはブロッキングI/Oを排他的に使用するため、要求していることは実行可能です。実際、ほとんどの状況でIndyがどのように機能するかを正確に示しています。書き込み操作を実行して戻るのを待つだけで、すぐに読み取り操作を実行できます。実際、すでにTIdCmdTCPServerサーバー側で使用TIdTCPClient.SendCmd()しているため、クライアント側でコマンドを送信し、1回の操作でその応答を待つことができます。

IndyがブロックしているためTIdTCPClient、メインスレッドをブロックしたくない場合は、ワーカースレッドで使用する必要があります。これにより、TIdTCPClientビジー状態のときにUIが応答しなくなります。

于 2012-08-14T19:42:09.143 に答える