聊天工具的架构分析
随着统一通信的发展,聊天工具有了更好的发展,其中要算手机和网上的即时聊天工具的发展了。手机主要是3G的开发,有了统一通信技术的支持,我们才可以实现第三代的通信,但是这里要说的另一个方面,关于聊天工具的。
下面就聊天工具开发聊聊现有聊天工具的架构,需要先说明的是TCP和UDP这两个协议,因为只有先确定了这两个最重要的协议,才可以确定一个即时聊天软件的架构。首先举两个例子,即时聊天软件MSN使用的就是TCP,然而QQ使用的是UDP协议。其实这两者的最大区别就是TCP的可靠保证,是它的三次握手机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,所以不可靠。比如说,在MSN上,要传输文件,首先是发送文件,对方确定接受,然后再发送,这样,三次握手。但是UDP不同,它是直接发送,不管对方是否同意,还是会发送,所以很不安全,但是这是由于这样,也保证了传输的速度,不会受到安全性的限制。而TCP一般会保证发送和收到,更适合一些对安全性质需要较高的工具软件。但是为什么同样是即时聊天性质的软件,MSN使用的是TCP,而QQ的则是UDP呢?通过思考,我认为,国外的网络环境相对国内的好很多,安全性也有保证,而国内的网络环境不如国外,还有很多代理服务器,再加上网通和电信,造成了很多不便,如果使用的是TCP的话,那么我们很多用户将无法使用这个软件,或者是在传输文件和数据的时候将会遇到很多的困难,甚至无法传送文件,所以QQ使用了UDP。其实呢,大多聊天软件例如QQ,不光是使用了UDP,在某些方面也用到了TCP,就像QQ的文字聊天协议。
统一通信中即时聊天软件的架构,由三部分组成,DispatchServer(DS) Notification Server (NS)和Switchboard Server (SB)。
DS采用的负载均衡方式应该比较简单,通过DNS解析来做负载均衡。并且由于在DS上的连接都是短连接,保持时间非常短,所以应该DS服务器的数量应该不会很多。由于DS必须要返回一个可用的NS IP,那么内部应该还有其他种类的服务器来保存当前所有可用的NS服务器,以及这些NS服务器上的负载。通过DS这一层来为接下来的NS做负载均衡。NS连接均为长连接,所以在这一层上的负载由DS来调节。如果NS负载太大,新客户连接上DS时会返回其他相对空闲的NS服务器。当然NS服务器之间也有相互通讯的机制也是少不了的,比如上下线通知、对话发起等等。SB连接的时间介于NS和DS之间,其负载由NS来作控制。对话完成后和SB之间的连接就关闭了。不过由于所有的对话都在SB上进行,MS的服务器资源再强也会吃紧,所以现在新版的MSN Messenger都加入了P2P Message类型,在发起对话的时候会判断如果双方都支持sustain ,则会直接点对点连接连接,绕过SB这一层。
在及时软件的交互过程中,首先客户端向服务器发送一个请求登录令牌的数据包,服务器返回登录令牌。这个令牌是在服务器端生成的,和客户端的IP地址,版本信息等数据相关。在客户端得到登录令牌后,就会向服务器发送一个包含登录信息的登录请求,服务器首先会查看客户端的号码、IP地址和版本是否可以在本服务器上进行登录,如果可以就验证客户端的登录信息是否与服务器上保存的登录信息一致,如果一致就向客户端返回一个连接成功的数据包,不匹配则返回登录失败。这就是整个的登录的实现过程。