Xmpp client重连机制

 

目录

1 XMPP存在的意义.... 4

2 带防火墙的XMPP部署.... 4

3 XMPP关系图.... 5

4 XMPP连接请求消息序列.... 6

5 CPE端XMPP Client重连机制.... 6

5.1连流程图... 7

5.2重连时间间隔... 7

5.3部分重连代码... 7

六 参考文档.... 8

 

 

 

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部署

Xmpp client重连机制

 

 

3 XMPP关系图

Xmpp client重连机制

 

 

 

4 XMPP连接请求消息序列

Xmpp client重连机制

由上图可知CPE第一次开机或启动上报数据完成后,ACS利用XMPP的IQ(Info/Query)通信原语发送CR(Connection Request)请求给CPE来建立连接来做后续的服务。

5 CPE端XMPP Client重连机制

XMPP Server维护和某些意外情况下,XMPP Client会离线。在这种情况下,XMPP Client需要重新连接XMPP服务器,以保持不间断的服务。重连机制尤显重要.

 

5.1重连流程图

Xmpp client重连机制

 

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