我正在使用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)
我不确定如何让客户端断开连接以进行记录。如果有人可以提供帮助,我会非常感激
答案 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。