1

私はツイストでサーバーの群れを構築しています。私はこのサンプルコードを持っています:

class MyHandler(basic.LineReceiver):
    def lineReceived(self, line):
      self.factory.sendLine("Welcome!")
    def makeConnection(self, transport):
      # what should go in here?

factory = protocol.ServerFactory()
factory.protocol = MyHandler
application = service.Application("My server")
internet.TCPServer(3030, factory).setServiceParent(application)

これはサーバーの群れなので、すでに実行されているサーバー(2.2.2.2、ポート3032など)との接続を確立し、新しいサーバーがリッスンしていることを知らせるためにいくつかの制御情報を送信する必要があります。
私の理解では、この情報を送信するには、リッスンするソケットを使用する必要があるため、他のサーバーはそれを使用してパケットを送り返すことができます。

BaseProtocolから継承されたmakeConnectionメソッド(サーバーがリッスンを開始する前に呼び出される)をオーバーライドできると思います。
しかし、それを達成するために、そのメソッド内で何をする必要がありますか?

4

1 に答える 1

0

まず、Twisted には「ソケット」がありません。もちろん、基礎となる実装は TCP ソケットですが、 TwistedIProtocolと と とITransportの観点から話すとIListeningPort、多くの混乱を軽減できます。

しかし、あなたは混乱しています。makeConnectionは のメソッドであり、リスニング ソケットに何かが接続IProtocolされるまでプロトコルは作成されません。「リスニングソケット」にデータを送信することはできません(これは、それを行うためのメソッドを持たないインターフェースによって明確にされます)、「接続されたソケット」にのみ、または.IListeningPortITransport

したがって、ここでのコード サンプルは、それに関する有用なアドバイスを提供するには、少し最小限すぎます。

于 2013-03-03T00:18:43.407 に答える