xmpp 메시지를 보낼 응용 프로그램이 있습니다. 그 경우는 드문 경우가 있지만 (때로는 며칠 동안은 안됨) 다시 움츠러들 수 있습니다. 나는 아무 것도받지 않고 그냥 보내고 싶다. 직접적인 접근은 감지되지 않은 타임 아웃으로 진행됩니다. 마지막으로 send()
이 발생하지 않습니다 (수신자는 아무 것도 얻지 못함). 그러나 문제를보고하지 않고 반환합니다 (모든 것이 잘 작동하는 것처럼 간단한 ID를 반환합니다). 다음에 send()
을 호출하면이 호출되고 IOError가 발생합니다 ('서버와 연결이 끊어졌습니다').python-xmpp 타임 아웃을 감지하십시오.
각 메시지마다 일정한 연결 끊기/다시 연결을 할 수는 있지만 때때로이 연결이 끊어지고 다시 연결되는 경우가 많기 때문에 (이 경우 여러 번 서버가 여러 번 인식되는 것을 알 수 없기 때문에) 좋지 않습니다.
여기서 대답을 시도해 볼 수는 this question입니다.하지만 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.send'를'try : catch :'에 넣지 않는 이유는 무엇입니까? 예외의 유형을 확인할 수 있습니다. IOError이면 다시 connectXmppClient를 호출하십시오. –
나는 try/catch를 준비해두고있다. 하지만 내가 쓴 것처럼 : IOError는 첫 번째 호출에서 발생하지 않습니다. 단지 다음 시간 (나중에 몇 시간이 될 수있다)은 내가 잡을 수있는 예외를 던집니다. 그 좋지 않다. 차라리 (물론) 첫 번째 메시지를 보낼 때 연결이 끊어진 것을 알기 때문에 연결을 다시 설정하고 첫 번째 메시지를 보내도록 다시 시도 할 수 있습니다. – Alfe