管理多个Twisted客户端连接

Tom*_*Tom 6 python twisted

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

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

Gly*_*yph 4

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

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