0

ポート 6000 の localhost でサーバーを実行するとします (サーバー A とします)。このサーバーと通信する(サーバーAにメッセージを送信する)独自のクライアントがあります。サーバーAは、ポート7000で実行されている別のサーバー(サーバーBなど)にメッセージを時々送信します。これも私たちの管理下にあります。クライアントは、サーバー B が受信した特定のメッセージに従って、サーバーにメッセージを送信する必要があります。

これは、私が達成したい一連のステップの例です

  1. OurClient は ServerA にメッセージ (JOIN) を送信します
  2. ServerA がメッセージ (ACKNOWLEDGED) を ServerB に送信する
  3. ServerA はメッセージ (PATH_CLEAR) を ServerB に送信します
  4. ServerB は (PATH_CLEAR) を OurClient に通知します
  5. OurClient はメッセージ (MOVE_FORWARD) を ServerA に送信します
  6. ServerA がメッセージ (MOVED_FORWARD_BY_A_CELL) を ServerB に送信する
  7. ServerA がメッセージ (OBSTACLE_AHEAD) を ServerB に送信する
  8. ServerB は (OBSTACLE_AHEAD) を OurClient に通知します
  9. OurClient は ServerA にメッセージ (STOP) を送信します
  10. ServerA は ServerB にメッセージ (STOPPED) を送信し…………

Python でソケット モジュールを使用してサーバーに接続し、クライアントとサーバーを作成しました。このような動作を実現するためにスレッドを使用する必要がありますか? もしそうなら、どうすればいいですか?

私はそうしようとしましたが、これがそのために使用したコードです Pythonソケットプログラミングを使用してサーバーからの応答をトリガーする方法

しかし、他のサーバーが「#JOIN」メッセージを受け入れると、メッセージを送信できなくなります。私のクライアントは、最初のメッセージの後、メッセージを送信しません。これを修正するにはどうすればよいですか?

これを行う方法の代替方法はありますか、またはコードに変更を加える必要がありますか?

4

1 に答える 1

0

マルチスレッドを使用する必要はありません。モジュール「select」を使用するだけで、pollメソッドを使用して、使用する準備ができているファイル記述子を確認することをお勧めします。

一般に、selectまたはpollを使用すると、スレッドを使用するよりも高速になります。

于 2012-12-07T00:15:31.233 に答える