经产观察
IT资讯
IT产业动态
业界
网站运营
站长资讯
互联网
国际互联网新闻
国内互联网新闻
通信行业
通信设备
通信运营商
消费电子
数码
家电
通信设备

简易视频直播与即时通讯集成之

作者:habao 来源: 日期:2017-12-1 13:29:14 人气:

  上一篇文章我主要讲了一些基本概念,接下来我将对一些关键的技术点进行简要描述。任何一个系统都会有一个主框架,只有把架子搭好了,才能系统的稳定性和扩展性,在架子的基础上不断扩展业务功能。本章我将介绍即时通讯的基本系统结构。

  即时通讯的主要功能还是以文字消息为主,再增加一些好友,群组的功能,最后加上音频、视频通话的功能,当然也可以再加入一些自有业务,例如商品推荐等。如果想拥有十分灵活的扩展性,通过UDP、TCP实现私有协议是唯一选择,所以我们不考虑xmpp等一些开源协议,虽然他足够灵活,但当我们真正涉及到自身业务领域的时候,其弊端足以让我们失望,我接触过一个这样的用户,最初使用xmpp开发,做到后期发现扩展起来越来越难,不得不完全放弃,找我们从头开发,当然不是说xmpp不好,而是要根据自己需求选择技术方案,这一点在任何领域都适用。

  一个服务器,一个客户端,没错,这是典型的CS结构,所有客户端都连接到服务器,服务器记录了当前所有的客户端连接(不管是TCP还是UDP,都会有一个登录过程),当我们一对一聊天时,发送者将消息发送到服务端,服务端将消息转发给接收者,这是通过服务器转发的方式,还可以通过P2P的方式,即发送者向服务器获取接收者的IP,端口,然后发送者和接收者建立连接,之后便可以进行消息通信了,P2P建立连接的过程比较困难,可能由于网络和由的,某些情况下会打洞失败,所以我更采用服务器转发方式,如果是群聊,则给每一个参与群聊的用户转发此聊天消息就行了。

  这里我先插如另外一个话题,就是UDP和TCP的选择,我的是TCP优先,根据以往经验,相对于用户体验来说,TCP比UDP多占用的那点带宽真不算什么,可能在技术复杂度上来说,UDP更简单,但从系统稳定性和用户体验来说,TCP绝对是你的首选,不必担心高并发和负载问题,因为这是你必须要解决的。

  所有的登录服务和聊天服务向LB注册,并将自己的用户连接数定时通知给LB,用户登录时,先从LB上获取一个人数最少的登录服务和聊天服务,然后再连接返回的登录和聊天服务,LB分配服务的算法通常是轮询和选择人数最少的,总之就是把用户均匀的分散开,达到负载均衡的目的,LB本身因为是短连接,所以他的负载不是问题,如果你担心LB会压力很大,那你可以启动多个LB,如何选择LB就需要你自己想办法了,原理都是一样的。

  细心的你可能会发现,聊天服务器有很多,如果我的好友和自己不在同一个聊天服务器上,那怎么通信呢,这当然是通过聊天服务器之间的消息转发来实现了,我们需要把每一个用户当前在哪个聊天服务器记录下来,如果不在同一个聊天服务器,则转发到对应的聊天服务器上,然后再转发给接收者。

  目前为止我们好像解决了大部分问题,负载均衡也实现了。但有两个问题是我们需要进一步考虑的,第一个就是为了提高负载,不断增加业务服务,其实浪费了很多资源,如果业务服务只启动少量实例,则大大降低了成本和资源成本,第二个问题,我们把业务服务直接给用户,存在很大风险,一旦业务服务遭受,致使服务程序崩溃,程序内存数据不能恢复,用户也很难在短时间内实现自动切换,于是网关的引入为解决此问题提供了方法。(图4)

  网关,作为客户端和服务端之间的桥梁,所有的数据通信均通过网关转发,这样便把业务服务器与用户隔离开来,即使遭受到,也不会影响真正的业务数据,客户端发现当前网关不可用,则自动切换到下一个可用网关即可,这种自动切换的速度通常在几秒内即可完成。

  另外一个好处,网关作为负载均衡的压力分担,对于即时通讯来说,数据量不会非常大,主要是TCP长连接所占用的资源管理。在这种结构下,一对一聊天时,业务服务首先查询接收者所在的网关,然后转发到此网关,网关再转发给接收者,业务管理更方便,数据流转更清晰,这也便是我们最终的系统结构。

  推荐:

  

关键词:即时通信原理
推荐文章