Xmpp client重连机制
目录
1 XMPP存在的意义
随着TR-069可以管理的CPE设备越来越多,然而位于NAT或启用防火墙的网关后面的设备(可能使用网络地址转换(NAT))无法在CPE不设置复杂端口映射的情况下简单地公开可直接寻址的URL。由于这是不可取的,TR-069的附件G指定了一种使用STUN(NAT的会话遍历实用程序)协议的方法,允许设备通过网关接受HTTP GET请求,但是STUN不是最好的解决办法。首先,它是基于UDP的,ACS不能保证它的CRs已经到达。随着新协议的出现,宽带论坛TR-069的开发人员开始寻找使用可扩展消息和状态协议(XMPP)来允许连接请求发生的消息总线解决方案。这在TR-069修正议案5的附件K中有详细定义。
2 带防火墙的XMPP部署
3 XMPP关系图
4 XMPP连接请求消息序列
由上图可知CPE第一次开机或启动上报数据完成后,ACS利用XMPP的IQ(Info/Query)通信原语发送CR(Connection Request)请求给CPE来建立连接来做后续的服务。
5 CPE端XMPP Client重连机制
XMPP Server维护和某些意外情况下,XMPP Client会离线。在这种情况下,XMPP Client需要重新连接XMPP服务器,以保持不间断的服务。重连机制尤显重要.
5.1重连流程图
5.2重连时间间隔
* Connect retry count Wait interval range (min-max seconds)
* #1 16-32
* #2 32-64
* #3 64-128
* #4 128-256
* #5 128-256
……
5.3部分重连代码
do
{
……
xmpp_initialize();
……
ctx = xmpp_ctx_new(NULL, log);
……
/* create a connection */
conn = xmpp_conn_new(ctx);
……
xmpp_connect_client(conn, NULL, 0, conn_handler, ctx);
/* enter the event loop our connect handler will trigger an exit */
xmpp_run(ctx);
/* release our connection and context */
xmpp_conn_release(conn);
xmpp_ctx_free(ctx);
/* final shutdown of the library */
xmpp_shutdown();
sleep(retry_interval());
}while(++reconn);
六 参考文档
Appendix III. XMPP Connection -Theory of Operations
Annex K. XMPP Connection Request