1

我正在使用 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)

我不确定如何让客户端断开连接也被记录。如果有人可以提供帮助,我将不胜感激

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 回答