XMPP即时通讯机制

XMPP(Extensible Messaging and Presence Protocol)可扩展消息呈现处理协议,一种基于XML的协议。

1、 XMPP可以实现多个客户端、多个服务器、多个网关的即时通讯
这里写图片描述;
2、 通常客户端与服务器连接的端为:5222,服务器与服务器连接的端口为5269;
3、 XMPP在网络上进行通讯,所以每个通讯实体都有一个地址,这个地址通常包含三个字段:Domain identifier(域名)、Node identifier(节点名)、Resource identifier(资源名),其中域名为必须元素,其他两个为非必需元素。他们的格式是Node@Domain/Resource或者Node@Domain。

XML流

XMPP本质上是一种XML流技术,客户端开始和XMPP服务器进行通话时,会建立一个长时间的TCP连接,然后和服务器协商一个XML流,一旦你和你的服务器建立了一个XML流,你和服务器之间就可以通过流交换三个特殊的XML片段:<message/>、<presenc/>、<iq/>,这些片段称为XML节,是XML中三个最有意义的片段。
举例说明XML流的语法格式(如下):
客户端:
    <?xml version='1.0'?> 

    <stream:stream 

    to='example.com' 

    xmlns='jabber:client' 

    xmlns:stream='http://etherx.jabber.org/streams' 

    version='1.0'> 
服务器:
    <?xml version='1.0'?> 

    <stream:stream 

    from='example.com' 

    id='someid' 

    xmlns='jabber:client' 

    xmlns:stream='http://etherx.jabber.org/streams' 

    version='1.0'> 
以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商出需要通讯协议,中间通信过程就是客户端发送的一个个XML Stanza,。服务器根据客户端发送的信息以及程序的逻辑,发回XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。

绑定到TCP上

在客户端与服务器通讯的过程中,服务器必须允许多个客户端共享一个TCP连接来传输XML节,包括从客户端传到服务器和从服务器传到客户端。
在服务器与服务器通讯的过程中,服务器必须建立两个TCP连接。一个用来向对方发送XML节,一个用于接收对方传来的XML节(此节由对方初始化)。
在这种通讯过程中,节 被认为是最基本的通讯单位,意义等同于一个数据包或其他网络通讯单位。

传输机制

XMPP是通过传送XML文件进行信息交流的,并不是类似QQ的点对点通讯,而是客户端到服务器再到客户端的通讯方式,举例如下:
1、 由客户端通过IO流向服务器发送XML文件,其中包含自身的用户名和密码;
2、 服务器收到客户端发来的XML文件后,提取其中的用户名、密码信息,并对其进行验证。验证成功时则向客户端会给客户端发一个XML文件表明已经登陆成功;
3、 登陆成功后,客户端发送一个获取好友名单的XML文件给服务器,服务器再将当前用户的好友以XML文件的方式发回给客户端,
4、 客户端选择一个好友,并向好友发送信息(其实是客户端先给服务器发送消息,服务器将消息保存并转发个好友所在的客户端),好友接收到消息,通讯完成。
PHP写得及时聊天工具,结构设计的很好,有源码。是学习PHP的好资料 JeCat-Jabber(简称:JJ) 是一款完全由 PHP 开发的即时通讯软件。JJ 采用 Gtk2 图像界面库来实现用户界面。顾名思义 JJ 使用 Jabber 协议(XMPP) ,因此可以 和 包括 GTalk 在内的 其它任何 XMPP 即时通讯软件 聊天。 JJ 项目的初衷在于 演示 桌面窗口 和 PHP 多任务处理,这两大 在长期在 PHP程序员 眼中 几乎是“不可能”的任务。 同时 也是 PHP框架 JCAT 的演示项目,JCAT 是一款同时 支持 Web 和 桌面 的 PHP框架,按照计划 将在稍后 发布。 JJ 的特点 > 跨平台。JJ 在Linxu 环境下 开发,在 Windows 平台上也一样可以正常使用。 > 实用 标准的 XMPP协议,能够与其它的 Jabber 软件互相通讯,例如 Google GTalk、Pidgin、PSI、Spark、Pandion,以及其它的 Jabber网页聊天窗口 > 可更换界面皮肤,皮肤样式文件 采用 类似 CSS 的语法,便于美工独立工作。 > 纯 PHP 实现,从 通讯协议 到 图形界面,全部都由 PHP 开发,如果你正好是一名 PHP 程序员,你可以驾轻就熟地在 JJ 之上进行二次开发。 > 可整合到你的网站中。JJ 近期的完善 会使 JJ 更容易地 为你的网站所有,让你的网站 也可以有像 淘宝旺旺 那样的 专用聊天工具 [ PHP 图像界面 ] JJ 采用 Gtk图像界面库,Gtk库 中 提供了丰富的 图形界面窗体(Widget),以及灵活方便的 窗体布局方式。 Gtk 本身 被广泛应用在 Linux 平台上,Linux 最著名 的桌面环境之一 Gnome 即是众多 Gtk软件 的集中展示。 PHP-Gtk2 将 Gtk 窗体绑定到 PHP 语言中,允许程序员 通过 PHP语言 来创建、显示、销毁 Gtk 窗体。PHP-Gtk 项目由 PHP创始人 亲自负责,并且自项目创立一来 一直持续发展,目前已经支持 最新的 Gtk2。 [ PHP 多任务处理 ] PHP 直到 5.2都没有提供 稳定可靠的 多线程特性。 但 PHP 仍然有能力进行多任务处理。 多线程 因为涉及到 线程安全、线程同步 等 困难,在 支持线程的语言中,也常常建议尽量避免使用。 Linux 的多路复用 是 更稳定和安全的 多任务模式,从 PHP5.0 开始 多路复用 支持 Windows 平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值