管理多个Twisted客户端连接

6
我正在尝试在一个类似爬虫程序的项目中使用Twisted来管理多个客户端连接。我想要维护一个包含5个客户端的池,让它们同时工作。每个客户端的功能是连接到指定的IRC服务器(从列表中获取),进入特定的频道,然后将该频道中的用户列表保存到数据库中。
我遇到的问题更多是架构上的而不是技术上的。我对Twisted相当新手,不知道如何管理多个客户端的选项。我假设最简单的方法是让每个ClientCreator实例在完成其工作后自动关闭,并有一个中央循环来检查是否有空间添加新的客户端。我认为这不是一个特别不寻常的问题,所以希望从其他人的经验中获得一些信息。
3个回答

4
最好的选择就是做一个显而易见的事情。不要有循环或重复定时调用;只需拥有处理程序来执行正确的操作。
保持一个中央连接管理对象,并使事件处理方法提供所需的信息以使其继续运行。启动时,建立5个外部连接。跟踪正在进行的连接数,并维护一个包含它们的列表。当连接成功(在connectionMade中)时,更新列表以记住连接的新状态。当连接完成(在connectionLost中)时,告诉连接管理器;它的响应应该是删除该连接并在其他地方建立一个新连接。在中间阶段,很容易发出请求所需的名称并将其存储到数据库中(通过等待从adbapi返回的Deferred完成数据库插入操作,最可能是等待数据库插入完成后再断开IRC连接)。

3

由于每个客户端都需要更新数据库,本能地想到可以利用连接池 -- 有关更多信息请参见这里(建议阅读整个文档以了解在使用Twisted时经常出现的一些重要设计模式)。


-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接