6

我正在尝试在一种管理多个客户端连接的蜘蛛程序中使用 Twisted。我想维护一个同时工作的大约 5 个客户的池。每个客户端的功能是连接到它从列表中获取的指定 IRC 服务器,输入特定频道,然后将该频道中的用户列表保存到数据库中。

我遇到的问题比任何东西都更具架构性。我对 Twisted 还很陌生,我不知道有哪些选项可用于管理多个客户端。我假设最简单的方法是简单地让每个 ClientCreator 实例在它完成其工作后终止,并有一个中央循环可以检查是否有空间添加新客户端。我认为这不是一个特别不寻常的问题,所以我希望从其他人的经历中收集一些信息。

4

3 回答 3

4

最好的选择实际上就是在这里做显而易见的事情。没有循环或重复的定时调用;只是让处理程序做正确的事情。

保留一个中央连接管理对象,并让事件处理方法为其提供继续运行所需的信息。启动时,建立 5 个传出连接。跟踪有多少正在进行中,并在其中维护一个列表。当连接成功时 (in connectionMade) 更新列表以记住连接的新状态。当连接完成时(in connectionLost)告诉连接管理器;它的响应应该是删除该连接并在其他地方建立新的连接。在中间,如何触发对您需要的名称的请求并将它们填充到数据库中应该是相当明显的(在删除 IRC 连接之前等待数据库插入完成,很可能是等待Deferred返回从adbapi)。

于 2009-09-11T00:52:04.960 回答
3

由于您的每个客户都需要更新数据库,因此我本能地认为我会捎带connection pool- 更多信息请参见此处(建议使用整个文档用于使用扭曲时经常出现的一些重要设计模式)。

于 2009-09-02T03:49:39.603 回答
-1

我不知道你是否被迫使用 Twisted,否则你可能想尝试一下Gevent

于 2011-03-22T23:34:54.103 回答