IM (一):基本介绍
By 紫韵: 最近对 IM 系统产生了兴趣,就看了些博客,现希望通过一个系列的文章对其稍作总结与记录,如有不对,还望指正。
IM:Instant Messaging,即时通讯,是一个允许两人或多人通过网络实时传输文字、语音、视频等的终端服务,如现在常用的 QQ、微信、百度 Hi 等。IM 完全基于 TCP/IP 网络协议族实现,而 TCP/IP 协议族则是整个互联网得以实现的技术基础。
典型的 IM 通讯方式有如下四种:
P2P && 服务器中转
一般常用的 IM 通讯方式就是 P2P 和服务器中转这两种,下面简要对比分析这两者的区别。
P2P:
P2P 多见于局域网内聊天工具,典型的应用有:飞鸽传书、天网 Maze 等。这类软件在启动后一般做两件事情:
进行 UDP 广播:发送自己信息和接受同局域网内其他端信息;
开启 TCP 监听:等待其他端进行连接。
限制和不便:
只适合 在线 的 点对点 消息传输,对离线、群组等业务支持不够;
由于 NAT 的存在,使得不同局域网内机器互联难度大大上升,在某些网络类型(对称 NAT)下无法建立连接。
服务器中转
几乎所有互联网 IM 产品都采用服务器中转这种方式进行消息传输,相比于 P2P 的方式,它的优劣如下:
典型的 IM 工作方式如下:
客户端登陆 IM 通讯中心(IM 通讯服务器),获取好友列表,获取离线消息,将自身标志为在线状态,与聊天对象建立聊天通道,进行文字、语音等通信。
一个典型的 IM 系统的选型过程大致包含如下几个部分:
IM 系统架构分层:
一个典型的 IM 系统可能由如下及部分组成:
功能点分析:
技术点分析:
移动端 IM 客户端难点
移动端架构设计的难点
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
全称:可扩展通讯和表示协议
简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议。XMPP is the IETF's formalization of the base XML streaming protocols for instant messaging and presence developed within the Jabber open-source community in 1999
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
核心的XML流传输协议
基于XMLFreeEIM流传输的即时通讯扩展应用
XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
XMPP的扩展协议Jingle使得其支持语音和视频。
XMPP的官方文档是RFC 3920
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。
以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message></message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。
目前不少IM应用系统如:Google公司的Google Talk以及Jive Messenger等开源应用,都是遵循XMPP协议集而设计实现的,这些应用具有很好的互通性。
是的,Java可以用来构建即时通讯(IM)应用程序。Java是一种流行的编程语言,拥有许多开发框架和库,可以帮助开发者快速构建IM应用程序。
一些Java库和框架可以用于构建IM应用程序,例如:
Netty:一个异步事件驱动的网络应用程序框架,可以用于构建高性能的IM服务器。
Smack:一个用于XMPP协议的Java库,可以用于构建XMPP即时通讯客户端。
Openfire:一个用于XMPP协议的即时通讯服务器,可以与Smack一起使用以构建IM应用程序。
Apache MINA:一个灵活且可扩展的网络应用程序框架,可用于构建各种类型的网络应用程序,包括IM应用程序。
总之,Java提供了丰富的开发工具和库,可以帮助开发人员构建功能强大的即时通讯应用程序。
0条评论