管理多个Twisted客户端连接

时间:2009-09-02 03:45:02

标签: python twisted

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

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

3 个答案:

答案 0 :(得分:4)

最好的选择就是在这里做明显的事情。没有循环或重复定时呼叫;只是让处理者做正确的事。

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

答案 1 :(得分:3)

由于您的每个客户都需要更新数据库,我本能地认为我会背负connection pool - 请参阅here了解更多信息(整个文档建议用于某些重要的设计模式,经常在使用扭曲时出现。

答案 2 :(得分:-1)

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