ツイストを使用してtcpクライアントサーバーアプリを作成するにはどうすればよいですか?サーバーはリクエストに応答するだけでなく、リクエストを送信することもできますか?p2pアプリのようなものですが、クライアントは常に接続を開始します。サーバーからの要求がいつ発生するかわからないため、reactorが起動した後、これをどのように実行できるかわかりません。
1 に答える
自問しなければならない質問は、サーバーがリクエストを送信する理由は何ですか?
おそらく、サーバーにリクエストを送信するように促す何かが世界で起こったのでしょう。ランダムに行うだけではありません。ランダムに行ったとしても、世界で起こったことは「ランダムな時間が経過した」ことになります。つまり、callLater(random(...), doSomething)
.
Twisted でプログラムを作成するときは、イベントに反応する方法を設定することから始めます。次に、reactor、つまり「イベントに反応するもの」を永久に実行します。着信ネットワーク イベントに反応する新しい方法をいつでも設定したり ( reactor.connectTCP
、reactor.listenTCP
、reactor.callLater
)、既存の待機中のものを破棄したり ( protocol.loseConnection
、port.stopListening
、delayedCall.cancel
) できます。リアクターを再起動する必要はありません。実際、実際には、reactor を実行する前に行う必要がある唯一のことは doであり、すべての初期設定を行うreactor.callWhenRunning(someFunctionThatListensOrConnects)
ために書き込みます。someFunctionThatListensOrConnects
この設定は、reactor が既に実行されているときに行われます。これは、事前に何もする必要がないことを示しています。原子炉は、実行中にその構成を完全に変更できます。
クライアント A がメッセージを送信したという事実により、サーバーがクライアント B にイベントを送信する原因となったイベントの場合、「ある接続で入力を別の接続で出力するにはどうすればよいですか?」