处理客户端与 openfire 服务器断开连接如果客户端空闲 5 分钟

Posted

技术标签:

【中文标题】处理客户端与 openfire 服务器断开连接如果客户端空闲 5 分钟【英文标题】:handle client disconnect with openfire server If the client is idle for 5mins 【发布时间】:2011-12-30 05:15:42 【问题描述】:

我用pyxmpp2写了一个和其他客户端聊天的demo,但是当客户端空闲5分钟左右服务器会与客户端断开连接,openfire无法配置超时,所以我决定在5分钟内发送一个在线消息,困扰我的问题是什么时候发送 presense 消息?

import pyxmpp2

class EchoBot(EventHandler, XMPPFeatureHandler):
    """Echo Bot implementation."""
    def __init__(self, my_jid, settings):
        version_provider = VersionProvider(settings)
        self.client = Client(my_jid, [self, version_provider], settings)
    @event_handler(AuthorizedEvent)
    def handle_authorized(self,event):
        presence = Presence(to_jid ="....",stanza_type = "available")
        self.client.stream.send(presence)
    def run(self):
        """Request client connection and start the main loop."""
        self.client.connect()
        self.client.run()
    def disconnect(self):
        """"""
        self.client.disconnect()
    def keepconnect(self):
        presence = Presence(to_jid ="....",stanza_type = "available")
        self.client.stream.send(presence)
        print "send presence"
....
bot = McloudBot(JID(mcloudbotJID), settings)
try:
        bot.run()        
        t = threading.Thread(target=bot.run())
        timer=threading.Timer(5,bot.keepconnect())
        t.start()
        timer.start()
except KeyboardInterrupt:
        bot.disconnect()

但是好像不行……

【问题讨论】:

【参考方案1】:

看看

http://community.igniterealtime.org/docs/DOC-2053

这详细说明了 OF 中的断开空闲属性,您可以将其设置为以毫秒为单位的值

断开空闲客户端的连接在基于会话的通信中很重要。它更多地与客户端意外关闭有关,而不仅仅是需要空闲。

如上所述,您可以在客户端中实现 ping 或心跳数据包发送。也许查看空白 IQ 请求的 pidgin 实现。

希望这会引导您朝着正确的方向前进。

詹姆斯

【讨论】:

以上是关于处理客户端与 openfire 服务器断开连接如果客户端空闲 5 分钟的主要内容,如果未能解决你的问题,请参考以下文章

使用openfire在xmpp中几秒钟后连接断开

即使与 XMPP 服务器断开连接,如何保持群聊室(MUC)一直存在?

XMPP 注销(Smack API),无需断开与服务器的连接

Strophe + Openfire 连接反复断开

由于 openfire 连接丢失而丢失消息

Android基于XMPP Smack Openfire下学习开发IM连接断开重连