跟踪客户端连接到Twisted PB服务器

时间:2013-12-10 13:37:26

标签: python twisted perspective-broker

我正在使用Twisted PB编写一些备份软件,以便从服务器获取信息,这一切都非常好。

我希望能够跟踪哪些客户端连接到服务器。我已设法获取客户端连接时记录的连接的IP地址。最初,客户端可以访问只有一个方法的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)

我不确定如何让客户端断开连接以进行记录。如果有人可以提供帮助,我会非常感激

1 个答案:

答案 0 :(得分:0)

Twisted触发clientConnectionLost()事件/方法。

示例:

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

有关示例和详细信息,请参阅:https://twistedmatrix.com/documents/11.1.0/core/howto/clients.html