高性能聊天系统

  作者:板桥banq

 

上页

1.2.2  架构设计图

 

nio

1-4  架构层次图

考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统,同时,系统还需要提供一些基本功能支持,如网络连接状态管理以及用户状态相关管理,前者为实现一个动态的实时在线系统提供基本连接的管理,后者类似J2EEServlet部分的Session管理。

本系统在架构设计上将分3个层次,如图1-4所示。

本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层实现解耦,同时又通过接口层和应用层保持实时数据联系。用户从客户端进入到本系统前,将实现统一的用户登录验证机制。有关用户登录验证机制有多种实现方式,可以参见后面章节的讨论。

用户成功进入系统以后,将会有一个生存周期,生存周期依据不同底层协议有不同的具体实现。不管哪一种实现方式,都必须在内存中保存用户连接的相关状态,如用户的IP地址、用户最新连接时间等。

为了保证系统的安全性,用户在登陆验证通过后将分配一个随即的SessionID,用户的每次请求都将包含这个SessionID,服务器每次接受请求后,将此SessionID和保存在内存中的数据实现核对。

这里将着重讨论Socket底层以及接口层的设计和实现。Socket底层设计分两大部分:协议设计和连接处理设计;接口层的目的是提供底层和应用层一个中介媒体作用,但是不能设计得太复杂,以免延误数据传送时间。

1.2.3  协议设计

TCP是一种面向连接的协议,传输数据比较可靠。TCP协议中包含了专门的传递保证机制:当接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才正式传送数据信息,否则将一直等待直到收到确认信息为止。

TCP在正式收发数据前,首先必须建立可靠的连接。一个TCP连接需要经过3次对话才能建立起来,其中的过程非常复杂。

基于TCP有各种会话应用协议,如HTTPFTP等协议。其中,HTTP协议是Internet最常用的协议,其最大的特点是能够穿透各种防火墙,因此,传送数据包以HTTP协议传送是一个实用的选择。

UDP是面向非连接的协议,传送数据之前不需要建立专门的连接,直接发送就可以,因此速度要比TCP快。由于UDP协议并不提供数据传送的保证机制,因此可能发生丢包的情况。UDP适合一次只传送少量数据、对可靠性要求不高的应用环境。

基于以上因素,在本系统中,聊天信息属于一种短小信息,一般情况下可以使用UDP发送,但是为防止数据丢包,在UDP发送失败的情况下可采取TCP再发送一次,而传送的数据采取HTTP协议。这是一个基于TCP/UDP、使用HTTP协议传送数据的混合实现方案。

这种方案带来的最大特点就是通信速度快,服务器和客户端减少了等待连接时间,提高了发送和响应时间。特别对于服务器而言,由于所需TCP链接数量减少,降低了因为建立、维护和撤销TCP链接所带来的服务器负荷,提高了服务器的吞吐量。

本方案模式同样适用于无线通信领域,目前无线通信网络的带宽比较窄,特别是网络质量很不稳定,客户端如果位于J2ME手机端,采取UDP/TCP混合方案可以同时解决带宽窄和网络不稳定两个问题。

本系统的具体实现分服务器和客户端两个方面。客户端将首先采取UDP发送,在UDP发送失败的情况下,采取TCP再进行发送;服务器处理HTTP请求后,产生相应的HTTP响应,响应数据如果无法放进一个UDP数据包中,则要求客户端使用TCP重试。当然,也可以采取其他TCP/UDP选择方案,要求系统中,这种选择策略是可以替换的。

下页