1

サーバーとの間で情報を取得するために Twisted PB を使用していくつかのバックアップ ソフトウェアを作成していますが、すべて非常にうまく機能しています。

私ができるようにしたいのは、どのクライアントがサーバーに接続されているかを追跡することです。クライアントの接続時にログに記録された接続の IP アドレスを取得できました。最初に、クライアントは 1 つのメソッドだけを持つ pb.Root オブジェクトにアクセスします。このメソッドは、格納されたデータへのアクセスを提供する別のオブジェクトを返します。

私がやりたいことは、接続されたクライアントの接続の詳細を更新して、サーバーに送信される呼び出しで送信される情報を含めることです。

クライアントロギングのコードは次のとおりです

class RKRServerFactory(pb.PBServerFactory):

    clientsConnected = {}

    def buildProtocol(self, addr):
        """
        Return a Broker attached to the factory (as the service provider).
        """
        self.clientsConnected[addr.host] = None
        print self.clientsConnected
        proto = self.protocol(isClient=False, security=self.security)
        proto.factory = self
        proto.setNameForLocal("root", self.root.rootObject(proto))
        return proto

初期接続メソッドのコードは次のとおりです。

def __init__(self):
    self.hostid = None
    self.storage = None
    self.databasepath = None

def remote_connect(self, hostid):
    self.hostid = hostid
    self.databasepath = os.path.join(os.path.join("/media/098974ed-f717-4dd4-8306-7c4863e87e67/rkr_server_storage", hostid))
    try:
        self.__initDatabase(self.databasepath)
    except IOError, e:
        return defer.fail(e)
    self.storage = RKRStorage(self)
    return defer.succeed(self.storage)

クライアントの切断もログに記録する方法がわかりません。誰かが助けてくれれば、本当に感謝します

4

1 に答える 1

0

Twisted はclientConnectionLost()イベント/メソッドをトリガーします。

例:

def clientConnectionLost(self, connector, reason):
    print 'Lost connection.  Reason:', reason

例と詳細については、https ://twistedmatrix.com/documents/11.1.0/core/howto/clients.html を参照してください。

于 2013-12-10T13:40:36.530 に答える