Openfire注册流程代码分析一、客户端/服务端注册用户流程经过主机连接消息确认后,客户端共发送俩条XML完成注册过程。服务器返回两条XML。注:IQ消息节点用于处理用户的注册、好友、分组、获取在线用户列表等MESSAGE消息节点用于处理用户的消息发送等等PRESENCE消息节点用户处理用的在线状态,例如用户上线、离线、忙等。客户端:告诉服务器注册从那个地址发出.
QQ的通信协议是一套基于二进制数据的自己开发的应用层网络协议。其中使用一些公司的加密算法。QQ基本通信协议支持udp和tcp两种基本协议方式。两种方式的基本数据结构是一样的。只是tcp包多了一个描述长度的头部。
Openfire 是基于XMPP 协议的IM 的服务器端的一个实现,虽然当两个用户连接后,可以通过点对点的方式来发送消息,但是用户还是需要连接到服务器来获取一些连接信息和通信信息的,所以服务器端是必须要实现的。Openfire 也提供了一些基本功能,但真的很基本的!庆幸的是,它也提供插件的扩展,像Spark 一样,同样强烈建议使用插件扩展的方式来增加新的功能,而不是修改人家的源代码。
认证(Authorization)的作用在于表明自己是谁,即向别人证明自己是谁。而相关的概念是MD5,用于认证安全。注意MD5仅仅是个hash函数而已,并不是用于加密。因为hash函数处理后的数据没法进行反向恢复,这样子的话别人没法盗取你认证身份的口令。 加密(Encryption)的作用在于对想传输的数据进行处理,在网络中即使被窃取也难以破解。加密的信息可以被破解,这需要一把钥匙——“密钥”。通过密钥,我们可以对数据进行加密和解密。最有名的专用密钥加密系统就是数据加密标准(DES), 这个标准现在由美国国家安全局和国家标准与技术局来管理。另一个系统是国际数据加密算法(IDEA), 它比DES的加密性好, 而且需要的计算机功能也不怎么强。
此需求说明书为『即时通讯系统』定义明确的需求,为该系统的详细设计、开发工作提供依据,为项目设计人员、开发人员、使用人员和其他相关人员对系统实现的功能达成统一的认识提供一个明确的书面说明。 本文档的内容,大部分是对即时通讯流程的一些阐述。
本文档探讨基于Asterisk如何实现VoIP的一些基本功能,包括基本呼叫功能的方案选取、主叫号码透传、如何编写Asterisk AGI程序、Radius认证计费模块等。 由于IP电话技术标准的开发涉及多个领域,因此,VOIP系统要想实现这些IP电话之间的通信,则必须提供支持这些协议的实现。目前主要涉及的协议如图1-1所示,其中除了HTTP是与WWW相关的协议外,其它的都是VOIP相关协议。
XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。 XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
实时 web 应用程序是联网的应用程序,带有基于 web 的用户界面,能够及时显示刚刚发布的 Internet 信息。这样的应用程序示例包括社会新闻聚合器和监控工具,它们能够使用来自外部源的数据持续更新。在本教程中,您将创建一个小型通知工具 Pingstream,它使用 PHP 和 JavaScript 通过 Extensible Messaging and Presence Protocol (XMPP) 进行通信,XMPP 是一组设计用于支持联机状态和实时通信功能的 XML 技术。
Openfire3.7.1 For Linux集群正确配置0、待完成工作相关优化参数配置,未做。一、准备工作0.RHL企业版64位1.JDK1.6上传至/usr2.下载openfire-3.7.1-1.i386.rpm3.准备好集群用插件Clustering.jar、coherence.jar、coherence-work.jar、tangosol.jar,mysql-connector-java-5.0.7-bin4.准备好mysql,mysql-5.1.52.tar.gz
RFC3920可扩展的消息和出席信息协议(XMPP):核心协议关于本文的说明本文为互联网社区定义了一个互联网标准跟踪协议,并且申请讨论协议和提出了改进的建议。请参照“互联网官方协议标准”的最新版本(STD1)获得这个协议的标准化进程和状态。本文可以不受限制的分发。
会话启动协议SIP(Session Initiation Protocol)是由IETF提出并主持研究的一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创建、修改、和终结一个或多个参加者参加的会话进程。这些会话包括Internet多媒体会议、Internet电话、远程教育以及远程医疗等。即所有的因特网上交互式两方或多方多媒体通信活动,统称为多媒体会话。参加会话的成员可以通过组播方式、单播联网方式或者两者结合的方式进行通信。
Openfire服务器的介绍Openfire是用Java语言编写的,是基于XMPP协议、开源的实时协作的服务器,具有跨平台的能力。它是实现XMPP协议的Server端包。Openfire与客户端采用的是C/S架构.一个服务器要负责为连接在其上的客户端提供服务。Openfire服务器的优点:1、内部集成web服务器,可用于设计web管理程序2、插件机制,方便扩展3、单台服务器就可大容量支持上万用户4、安装和使用都非常简单Spark客户端的介绍Spark也是一个开源,跨平台IM客户端。它的特性支持聊天,语音,视频,会议,文件收发,截屏,连接msn等功能和强大安全性能。如果企业内部部署IM使用Openfire+Spark是最佳的组合。Spark的核心则是Smack。Smack是什么?smack是一个用java写的XMPP客户端代码库,也是一个开源。优点:1.Smack是一个简单的,功能强大的类库。2.提供了更加智能化的类比如Chat和Groups,提高工作效率。3.不需要你熟悉XMPPXML格式,甚至是XML格式。4.易于实现机-机对话。
XMPP1.简介XMPP(Extensible Messagingand Presence Protocol)是一种以XML为基础的开放式即时通讯协议,核心部分RFC为RFC3920。有以下优点:可扩展性:XMPP的数据传输基于XML格式,可扩展性强。XMPP的核心协议栈(CoreStack)部分只定义了基础的Presence,Message,Iq等最主要数据格式和传输逻辑,更多的功能则通过定义扩展(Extensions)实现。
一、XMPP概述XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。二、XMPP体系架构XMPP的基本网络结构,xmpp定义了3个角色ClientServerGateway通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
在serverstarter启动时会用ClassLoader加载XMPPServer,XMPPServer会加载各种模块其中包括ConnectionManagerImpl,ConnectionManagerImpl是ConnectionManager接口的实现。该模块一般在加载完其它模块后加载,因为不希望在其它模块还没加载完的时候就监听客户端。
Java领域的即时通信的解决方案可以考虑openfire+spark+smack。当然也有其他的选择。Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.6.4版本,这个版本是当前最新的版本,而且网上可以找到下载的源代码。即时通信客户端可使用spark2.5.8,这个版本是目前最新的release版本,经过测试发现上一版本在视频支持,msn网关支持上可能有问题,所以选择openfire3.6.4+spark2.5.8是最合适的选择。
“会话发起协议(Session Initiation Protocol-SIP)是一个应用层的信令控制协议。用于创建、修改和终止一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发(例如:语音信箱)。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。”
oSIP是按照RFC3261(SIP)和RFC2327(SDP)标准,并使用标准c编写的一个SIP协议栈。它是一个公开源码的免费协议栈。oSIP协议栈结构简单而小巧,它并不提供高层的SIP会话控制的API,它主要提供一些解析SIP/SDP消息的API和事务处理的状态机。
SIP是一个应用层的控制协议,可以用来建立、修改、和终止多媒体会话(或者会议)例如Internet 电话。SIP也可以邀请参与者参加已经存在的会话,比如多方会议。媒体可以在一个已经存在的会话中方便的增加(或者删除)。SIP显示的支持名字映射和重定向服务,这个用于支持个人移动业务-用户可以使用一个唯一的外部标志而不用关系他们的实际网络地点。
开源代码的osip协议栈分为两个源代码包,整个协议栈采用lib库的形式,在内部没有使用到任务,采取与TCP/IP协议栈一样的策略,所以在使用上需要上层管理任务直接调用lib库提供的接口。因为在Lib库内部没有使用到像定时器、发送队列等的任务,而同时需要使用到定时器,所以在lib库的内部采用轮训遍历的方式不停的检查是否有定时器超时,这在某种程度上会浪费CPU的允许时间。同时整个lib库实现了对call, notify等的管理,为了实现重入,在应用启用多线程的条件下,内部启用的信号量和锁的使用,在下面的分析中不涉及到信号量和锁机制。