检测 python-xmpp 超时



我有一个应用程序可以发送xmpp消息。 这些场合很少见(有时几天都没有),但又可能会成群结队地出现。 我接收任何东西都没有用,我只想发送。 直接的方法会遇到未检测到的超时。 最后一个send()没有发生(接收器没有得到任何东西),但返回而不报告问题(返回一个简单的 id,好像一切正常)。 只有下一次调用send()才会引发 IOError("与服务器断开连接"。

我可以对每条消息进行不断的断开连接/重新连接,但我不喜欢这样,因为有时这会经常断开连接和重新连接(而且我不知道服务器是否在一秒钟内多次欣赏这一点)。

我可以在这里尝试作为答案的方法,但我真的不需要收到 XMPP 回复。

问题:有没有一种简单的方法可以在发送之前或之后检测连接超时,而无需尝试发送第二条消息(如果一切正常,这会向接收者发送垃圾邮件)?

我的直截了当的方法:

import xmpp
def connectXmppClient(fromJidName, password):
  fromJid = xmpp.protocol.JID(fromJidName)
  xmppClient = xmpp.Client(fromJid.getDomain(), debug=[])
  connection = xmppClient.connect()
  if not connection:
    raise Exception("could not setup connection", fromJid)
  authentication = xmppClient.auth(
    fromJid.getNode(), password, resource=fromJid.getResource())
  if not authentication:
    raise Exception("could not authenticate")
  return xmppClient
def sendXmppMessage(xmppClient, toJidName, text):
  return xmppClient.send(xmpp.protocol.Message(toJidName, text))
if __name__ == '__main__':
  import sys, os, time, getpass
  if len(sys.argv) < 2:
    print "Syntax: xsend fromJID toJID"
    sys.exit(0)
  fromJidName = sys.argv[1]
  toJidName = sys.argv[2]
  password = getpass.getpass()
  xmppClient = connectXmppClient(fromJidName, password)
  while True:
    line = sys.stdin.readline()
    if not line:
      break
    print xmppClient.isConnected()
    id = sendXmppMessage(xmppClient, toJidName, line)
    print id

您需要使用 xmppClient.RegisterDisconnectHandler() 注册断开连接处理程序。 这允许您指定将在断开连接时调用的函数。

相关内容

  • 没有找到相关文章

最新更新