【问题标题】:chatbot using twisted and wokkel使用 twisted 和 wokkel 的聊天机器人
【发布时间】:2011-02-14 15:59:50
【问题描述】:

我正在使用 Twisted 和 wokkel 编写一个聊天机器人,除了该机器人定期注销之外,一切似乎都在工作。为了临时解决这个问题,我在每个初始化的连接上都将存在设置为可用。有谁知道如何防止离线? (我假设如果我每分钟左右发送可用状态,机器人就不会下线,但这似乎太浪费了。)有人建议吗?这是存在代码:

class BotPresenceClientProtocol(PresenceClientProtocol):

    def connectionInitialized(self):
        PresenceClientProtocol.connectionInitialized(self)
        self.available(statuses={None: 'Here'})

    def subscribeReceived(self, entity):
        self.subscribed(entity)
        self.available(statuses={None: 'Here'})

    def unsubscribeReceived(self, entity):
        self.unsubscribed(entity)

提前致谢。

【问题讨论】:

  • 有时 IRC 网络希望您响应 ping。这可能是断开连接的一个可能原因。

标签: python twisted xmpp chatbot


【解决方案1】:

如果您使用 XMPP,我假设您提到了 wokkel,那么根据适用标准 RFC 3921,您确实需要定期交换存在信息(实际上,这是一个很大的开销XMPP 及其解决方案正在研究中,但这是目前最先进的)。从本质上讲,鉴于客户完全沉默可能是由于该客户刚刚离开的可能性很高,因此“我还在这里”这种定期“保证”似乎是必须的(我不确定那些方向是什么正在采取研究措施来改善这种情况——也许客户可以承诺“至少在接下来的 15 分钟内待在那里”,但鉴于大多数客户是一个善变的人类用户,他们无法阻止他们在随时离开,我不确定这是否足够可靠)。

【讨论】:

  • 嗯,很有趣。我希望会有某种 ping 机制,例如服务器尝试在假定客户端处于脱机状态之前向客户端询问其状态(就像上面对 irc 网络的评论中提到的汤姆)。那好吧。谢谢。
  • @dmitry,我相信您可以将其实现为 XMPP 扩展,但它没有被指定为标准的一部分,我相信(尽管我可能错了!) wokkel 没有这样的扩展(如果是这样,您肯定会在 wokkel 文档中找到它的详细说明)。
  • 许多 XMPP 客户端和服务器如果最​​近没有发送或接收流量,它们会定期发送一个空格。这足以唤醒 TCP 流,并最终导致将客户端标记为不可用的超时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 2020-11-06
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多