jabberd 系统架构

来源:互联网 发布:山西 软件开发水平 编辑:程序博客网 时间:2024/05/16 15:15
jabberd 2 结构(草案)  原文来自http://jabberd.jabberstudio.org/2/docs/section13.html1. jabber网络结构:   jabber的网络中包含了3类关系:      jabber客户端-jabber服务器      jabber服务器-jabber服务器      jabber服务器-外部IM网关             PC 2                      SVR 2                     PC 3      .-----------------.       .-----------------.       .-----------------.      |                 |       |                 |       |                 |      |   ,---------.   |       |   ,---------.   |       |   ,---------.   |      | ,'           `. |       | ,'           `. |       | ,'           `. |      |( Jabber 客户端 -+-------+- Jabber 服务器 -+-------+- Jabber 客户端 )|      | `.           ,' |       | `.           ,' |       | `.           ,' |      |   `---------'   |       |   `----+----'   |       |   `---------'   |      `-----------------'       `--------+--------'       `-----------------'                                         |             PC 1                        |      .-----------------.       .--------+--------.      |                 |       |        |        | SVR 1      |   ,---------.   |       |   ,----+----.   |      | ,'           `. |       | ,'           `. |      |( Jabber 客户端 -+-------+- Jabber 服务器 )|      | `.           ,' |       | `.           ,' |      |   `---------'   |       |   `----+----'   |      `-----------------'       |        |        |                                |   ,----+----.   |                                | ,'   外部    `. |                                |(      IM       )|                                | `.   网关    ,' |                                |   `----+----'   |                                `--------+--------'                                         |                                         |                                .--------+--------.       .-----------------.                                |        |        |       |                 |                                |   ,----+----.   |       |   ,---------.   |                                | ,'   外部    `. |       | ,'   外部    `. |                                |(      IM       -+-------+-      IM       )|                                | `.  服务器   ,' |       | `.   客户端  ,' |                                |   `---------'   |       |   `---------'   |                                `-----------------'       `-----------------'                                       SVR 3                     PC 4               图例      +--------------------------------------------+      |                                            |      |      +-------------+  TCP/IP 连接          |      |                                            |      |       ,---------.                          |      |     ,'           `.                        |      |    (               )  软件包或者模块       |      |     `.           ,'                        |      |       `---------'                          |      |                                            |      |    .---------------.                       |      |    |               |                       |      |    |               |    计算机:            |      |    |               |  PC 或者物理服务器    |      |    |               |                       |      |    `---------------'                       |      |                                            |      +--------------------------------------------+  1.1 jabber客户端-jabber服务器    如果两个jabber客户端(如PC1,PC2)的帐户在同一服务器上,他们就可以通过一个服务器进行交流。这种情况被称为一个闭合(close)的系统或者私有(private)系统1.2 jabber服务器-jabber服务器    对于两个帐户在不同服务器的客户端(PC1-PC2,PC2-PC3),该模式提供了一种桥方法,服务器与服务器之间建立一个桥来实现连接1.3 jabber服务器和外部网关的连接    一个外部网关就像一个适配器,将不同格式的数据相互转换2. jabberd的组件结构:   jabberd 2 的组件都是依靠TCP/IP协议通讯的:     * 路由(Router)     * 服务器-服务器(s2s)     * 分解器(Resolver)     * 会话管理(SM)     * 客户端-服务器(C2S)   jabberd 2 还使用了一些第3方组件     * 应用数据存储(Application Data Store)     * 验证数据存储(Authentication DAta Store)     * 外部IM网关   jabberd 2组件示意图                                PC 1                   SVR 2                  SVR 3                         .-----------------.    .-----------------.    .-----------------.                         |                 |    |                 |    |                 |                         |   ,---------.   |    |   ,---------.   |    |   ,---------.   |                         | ,'           `. |    | ,'           `. |    | ,'    外部   `. |                         |( Jabber 客户端 )|    |( Jabber 服务器 )|    |(      IM       )|                         | `.           ,' |    | `.           ,' |    | `.    系统   ,' |                         |   `----+----'   |    |   `----+----'   |    |   `----+----'   |                         `--------+--------'    `--------+--------'    `--------+--------'                                  |                      |                      |                                  |                      |                      |.---------------------------------+----------------------+----------------------+----------.|                                 |                      |                      |          ||      ,---------.           ,----+----.            ,----+----.                 |          ||    ,'   验证    `.       ,' 客户端 -  `.        ,' 服务器 -  `.               |          ||   (    数据软    +-----+    服务器     )   +--+    服务器      )              |          ||    `.   件包    ,'       `.   (C2S)   ,'    |   `.   (S2S)   ,'               |          ||      `---------'           `----+----'      |     `---------'                 |          ||                                 |           |                                 |          ||                                 |           |                                 |          ||                                 |           |                                 |          ||                            ,----+----.      |     ,---------.                 |          ||                          ,'           `+----+   ,'           `.               |          ||                         (    路由器     +------+   分解器      )              |          ||                          `.            +----+   `.           ,'               |          ||                            `----+----'      |     `---------'                 |          ||                                 |           |                                 |          ||                                 |           |                                 |          ||                                 |           |                                 |          ||                                 |           |                                 |          ||      ,---------.           ,----+----.      |                            ,----+----.     ||    ,'   应用    `.       ,'  会话     `.    |                          ,'  外部     `.   ||   (    数据软     +-----+    管理      )   +-------------------------+      IM        )  ||    `.   件包    ,'       `.   (SM)    ,'                               `.    网关   ,'   ||      `---------'           `---------'                                   `---------'     |`------------------------------------------------------------------------------------------'                                             SVR 1注意: 外部IM网关是一个可选的组件,它并不在jabberd 2的软件包里面。 它依靠第三方的软件2.1 路由器(Router)    路由器是jabberd的核心组件,它从其他组件接受信息,并把各个组件间传递xml数据包2.2 S2S    S2S控制和其他服务器的通信,并实现服务器回呼和远程jabber服务器的验证2.3 分解器(Resolver)    分解器是为支持S2S工作的.他为S2S回呼中验证部分提供分解主机名服务2.4 SM    SM(会话管理)实现了即时消息的大部分      * 消息传送      * 状态管理(Presence)      * 帐户管理(Rosters)      * 订阅(Subscriptions)    SM连接“应用数据软件包(Application Data Package(db))”保存状态数据。另外,SM组件控制jabber扩展的发现和私有列表(jabber extensions of disco(discovery)and privacy lists*).2.5 C2S    C2S组件控制与客户端的通信      * 和jabbar客户端连接      * 传递包给SM      * 验证客户端      * 注册用户      * 同SM引发活动    C2S组件连接验证数据包(Authentication Data Package(authreg))以便实现用户注册和验证3. jabberd 2 模块分解4. jabberd 2 数据控制   jabberd 使用数据控制(data handing)的概念以便适应各类数据处理包。数据控制(data handling)的核心是收集器(Collection)对象概念。每个收集器(Collection)都有类型(Type)和拥有者(Owner)两个属性.类型(Type)指明什么类型的数据正在被处理,如,队列(queue),vcard,名册条目(roster-item). 拥有者(Owner)表明谁拥有这个收集器(collection).对于和用户相关的数据,拥有者(Owner)是jabber ID(JID).   每个收集器(collection)管理了一个至多个数据对象(collection data)。每个数据对象(collection data)是包含了关键字(key),值(value)和类型(type).关键字(key)是一个字符串,表明被处理数据的种类。值(value)是被处理的数据值。类型(type)是数据的存储格式,如,boolean,integer,string,等。如下表                 +--------------+                  |  Collection  |              +--------------+---+              |  Collection  |   |          +--------------+---+   |          |  Collection  |   |   |                     Key for Object Diagram          +--------------+   |   |            +-------------------------------------+          | Type         |   |---+            |                                     |          | Owner        |   |                |   +-------+                         |          |              |---+                |   |       |                         |          |              |                    |   +-------+   Object                |          +--------------+                    |   |       |                         |                 |                            |   |       |                         |                 |                            |   +-------+                         |                 |                            |       |                             |                 |                            |       |  1-多关系           |                 ^ (1个收集器管理多个数据)    |       |                             |        +-------------------+                 |       ^                             |        |  Collection Data  |                 |                                     |        +-------------------+                 +-------------------------------------+        | Key               |        | Value             |        | Type              |        |                   |        +-------------------+               5. jabberd 2 数据结构(针对MySQL)   在MySQL中jabberd 数据控制(Data handlling)变得更加具体和清晰.在关系数据库中,每个收集器(collection)就是一个表,每个数据对象(collection data)的关键字(key)就是一个域(field),而每一行包含一个收集器拥有者(collection owner)(JID)和一个或多个数据域(field).   1. 表清单(MySQL)      active           保存每个帐户最近活动时间      authreg           包含了验证信息,包括: 用户名(username),真实名(realm)和密码(password)      disco-items          保存即时状态的信息(persistent discovery information),以便在离线状态下存取      logout          保存JID和时间戳,表明最近登出的时间      motd-message           保存XML格式的当天的消息(Message Of The Day)      motd-times           保存与收到的MOTD相关联的JID和时间戳      privacy-default           保存当前使用列表的名称,以便在用户登录时激活      privacy-items           保存用户的私有列表(黑名单/白名单)      private           以XML格式存储一些用户相关的信息,如用户偏好,书签等      queue           以XML格式保存排过队的信息      roster-groups           保存那些仅仅和某个组关联的名册条目      roster-items           保存所有的名册,包括验证的信息      vacation-settings           Handles vacation settings, including start, end and message      vcard           保存vcard信息    2. 表描述:                                            MySQL 表描述+------------------------------------------------------------------------------------------------------------+|                                                                                                            ||  +-------------------------------+       +-----------------------+       +------------------------------+  ||  | active                        |       | authreg               |       | disco-items                  |  ||  +-------------------------------+       +-----------------------+       +------------------------------+  ||  |                               |       |                       |       |                              |  ||  +-------------------------------+       +-----------------------+       +------------------------------+  ||  | collection-owner: TEXT        |       | username: TINYTEXT    |       | collection-owner: TEXT       |  ||  | object-sequence:  BIGINT(20)  |       | realm:    TINYTEXT    |       | object-sequence:  BIGINT(20) |  ||  | time:             INTEGER(11) |       | password: TINYTEXT    |       | jid:              TEXT       |  ||  |                               |       | token:    VARCHAR(10) |       | name:             TEXT       |  ||  +-------------------------------+       | sequence: INTEGER(11) |       | node:             TEXT       |  ||  |                               |       | hash:     VARCHAR(40) |       |                              |  ||  +-------------------------------+       |                       |       +------------------------------+  ||                                          +-----------------------+       |                              |  ||                                          |                       |       +------------------------------+  ||                                          +-----------------------+                                         ||                                                                                                            ||                                                                                                            ||  +-------------------------------+   +------------------------------+    +-------------------------------+ ||  | logout                        |   | motd-message                 |    | motd-times                    | ||  +-------------------------------+   +------------------------------+    +-------------------------------+ ||  |                               |   |                              |    |                               | ||  +-------------------------------+   +------------------------------+    +-------------------------------+ ||  | collection-owner: TEXT        |   | collection-owner: TEXT       |    | collection-owner: TEXT        | ||  | object-sequence:  BIGINT(20)  |   | object-sequence:  BIGINT(20) |    | object-sequence:  BIGINT(20)  | ||  | time:             INTEGER(11) |   | xml:              TEXT       |    | time:             INTEGER(11) | ||  |                               |   |                              |    |                               | ||  +-------------------------------+   +------------------------------+    +-------------------------------+ ||  |                               |   |                              |    |                               | ||  +-------------------------------+   +------------------------------+    +-------------------------------+ ||                                                                                                            ||                                                                                                            ||  +------------------------------+    +-------------------------------+   +------------------------------+  ||  | privacy-default              |    | privacy-items                 |   | private                      |  ||  +------------------------------+    +-------------------------------+   +------------------------------+  ||  |                              |    |                               |   |                              |  ||  +------------------------------+    +-------------------------------+   +------------------------------+  ||  | collection-owner: TEXT       |    | collection-owner: TEXT        |   | collection-owner: TEXT       |  ||  | object-sequence:  BIGINT(20) |    | object-sequence:  BIGINT(20)  |   | object-sequence:  BIGINT(20) |  ||  | default:          TEXT       |    | list:             TEXT        |   | ns:               TEXT       |  ||  |                              |    | type:             TEXT        |   | xml:              TEXT       |  ||  +------------------------------+    | value:            TEXT        |   |                              |  ||  |                              |    | deny:             TINYTEXT(4) |   +------------------------------+  ||  +------------------------------+    | order:            INTEGER(11) |   |                              |  ||                                      | block:            INTEGER(11) |   +------------------------------+  ||                                      |                               |                                     ||                                      +-------------------------------+                                     ||                                      |                               |                                     ||                                      +-------------------------------+                                     ||                                                                                                            ||                                                                                                            ||  +------------------------------+    +------------------------------+    +-------------------------------+ ||  | queue                        |    | roster-groups                |    | roster-items                  | ||  +------------------------------+    +------------------------------+    +-------------------------------+ ||  |                              |    |                              |    |                               | ||  +------------------------------+    +------------------------------+    +-------------------------------+ ||  | collection-owner: TEXT       |    | collection-owner: TEXT       |    | collection-owner: TEXT        | ||  | object-sequence:  BIGINT(20) |    | object-sequence:  BIGINT(20) |    | object-sequence:  BIGINT(20)  | ||  | xml:              TEXT       |    | jid:              TEXT       |    | jid:              TEXT        | ||  |                              |    | group:            TEXT       |    | name:             TEXT        | ||  +------------------------------+    |                              |    | to:               TINYTEXT(4) | ||  |                              |    +------------------------------+    | from:             TINYTEXT(4) | ||  +------------------------------+    |                              |    | ask:              INTEGER(11) | ||                                      +------------------------------+    |                               | ||                                                                          +-------------------------------+ ||                                                                          |                               | ||                                                                          +-------------------------------+ ||                                                                                                            ||                                                                                                            ||  +-------------------------------+   +------------------------------+                                      ||  | vacation-settings             |   | vcard                        |                                      ||  +-------------------------------+   +------------------------------+                                      ||  |                               |   |                              |                                      ||  +-------------------------------+   +------------------------------+                                      ||  | collection-owner: TEXT        |   | collection-owner: TEXT       |                                      ||  | object-sequence:  BIGINT(20)  |   | object-sequence:  BIGINT(20) |                                      ||  | start:            INTEGER(11) |   | fn:               TEXT       |                                      ||  | end:              INTEGER(11) |   | nickname:         TEXT       |                                      ||  | message:          TEXT        |   | url:              TEXT       |                                      ||  |                               |   | tel:              TEXT       |                                      ||  +-------------------------------+   | email:            TEXT       |                                      ||  |                               |   | title:            TEXT       |                                      ||  +-------------------------------+   | role:             TEXT       |                                      ||                                      | bday:             TEXT       |                                      ||                                      | desc:             TEXT       |                                      ||                                      | n-given:          TEXT       |                                      ||                                      | n-family:         TEXT       |                                      ||                                      | adr-street:       TEXT       |                                      ||                                      | adr-extadd:       TEXT       |                                      ||                                      | adr-locality:     TEXT       |                                      ||                                      | adr-region:       TEXT       |                                      ||                                      | adr-pcode:        TEXT       |                                      ||                                      | adr-country:      TEXT       |                                      ||                                      | org-orgname:      TEXT       |                                      ||                                      | org-orgunit:      TEXT       |                                      ||                                      |                              |                                      ||                                      +------------------------------+                                      ||                                      |                              |                                      ||                                      +------------------------------+                                      ||                                                                                                            |+------------------------------------------------------------------------------------------------------------+


	
				
		
原创粉丝点击