一个大型组织如果需要从头开发一套自主可控的即时通讯软件,从技术角度第一个要考虑的核心问题就是:如何确定客户端和服务器之间的通讯协议和通讯机制?

通讯协议怎么选?

大型组织架构就意味着员工人数多,网络情况复杂,以10万账号的组织规模为例,由于员工办公环境的多样性,一定存在内部高速网络、手机移动网络、Wifi网络等强弱网综合在一起的情况。

如果仅仅考虑内部高速网络的使用场景,XMPP是一个值得考虑的选择,它有:标准开放、分布式设计、安全性好、可扩展性高等优点,几乎照顾到了客户端和服务器之间网络通讯的方方面面。

但是XMPP在通讯网络多种多样、较为复杂的情况下,存在:XML格式的协议包过于臃肿、浪费网络流量、对移动网络不够友好、服务器带宽资源占用过高等缺点。

所以综合考虑大型组织的使用场景和使用人数需求,我们推荐采用Google的Protocol Buffers(以下简称protobuf)技术进行数据包的编码和解码。

理由如下:

协议的制定和上手相对简单,可以先从即时通讯过程中最核心的3到5个协议开始着手,比如:登录、状态通知、消息通知等;扩展性好,protobuf的IDL语法支持协议包向前兼容,也为将来的扩充预留了空间;protobuf的协议包是二进制格式,编解码速度快,数据压缩比也很高,可以提高移动网络传输的成功率,有效降低服务器带宽的占用。一个典型的网络通讯协议数据包如下所示:

典型的网络通讯协议数据包

对于协议包的加解密来说,一般也可以有两个选择,一个是采用自定义算法对每个数据包做加解密处理,另外一个是采用TLS标准,基于证书来控制加解密的算法和密钥机制。

绝大多数即时通讯软件会选择TLS标准方案,因为自定义算法固化了加解密算法和密钥交换机制,调整和修改也较为困难,在考虑不周全的时候,会存在安全隐患。

而开放标准的TLS协议可以通过更换证书来自主选择加解密方式,自控性更高,可以灵活满足不同组织对不同安全级别的管理需求。即时通讯开发

通讯机制怎么选?

传统的IM一般会选择TCP长连接的方式,所有客户端和服务器之间的通信都通过长连接进行。

但是TCP长连接会存在一些短板,比如:

移动设备的网络连接不稳定,不同的网络之间切换会很频繁,单纯的TCP通道传数据会频繁中断,表现出来就是消息的发送总是在转圈等待,使用起来体验不佳;TCP顺序传输的吞吐容量受限,要严格按照时序将请求传给服务器,对于大型组织而言,并发量大的情况下,某个请求如果服务器响应不及时,会导致后续请求挤压,表现出来就是服务不可用,进而影响到日常的工作效率;从简单可靠的角度考虑,我们建议采用TCP+HTTP的传输方式:

TCP作为加密(TLS1.2)传输通道,数据协议基于protobuf设计,轻业务模式。主要用于:登录、消息通知、状态变化等场景;HTTPS作为业务传输通道,接口为RESTful风格,参数采用JSON数据格式。

TCP+HTTP的传输方式

这样的好处在于:

发消息采用了HTTP协议,网络的连通持续性要求不高,可以充分降低网络切换对数据传输带来的影响;将服务端成熟的HTTP服务体系引入到后端开发,达到服务开发过程简单高效的目的;客户端快速切换界面时,可取消之前界面产生的HTTP请求,减少服务器无效的资源消耗;充分引入HTTP服务开发领域内成熟的高可用解决方案,满足大型组织通讯平台的使用需求。

企业即时通讯软件,网络通讯协议和机制怎么选?相关推荐

  1. 企业即时沟通软件有哪些?要如何选择?

    在企业管理中,沟通是至关重要的一部分.随着科技的不断进步,企业间的沟通方式也在发生改变.传统的邮件和电话已经难以满足企业沟通的需求,因此,越来越多的企业开始采用即时沟通软件来进行沟通.以下是一些常见的 ...

  2. php网页怎么和PLC通讯,plc网络通讯方式和协议

    plc网络是由几级子网复合而成,各级子网的通讯过程是由通讯协议决定的,而通讯方式是通讯协议最核心的内容.通讯方式包括存取控制方式和数据传送方式.所谓存取控制(也称访问控制)方式是指如何获得共享通讯介质 ...

  3. php网络通讯,Linux_网络通讯--efax,功能说明:收发传真。 语  - phpStudy

    网络通讯--efax 功能说明:收发传真. 语 法:efax [-sw][-a][-c][-d][-f][-g][-h][-i][-j][-k][-l][-o][-q][-r][-v][-x][-t] ...

  4. python分布式邻居节点通讯_P2P网络及节点发现机制

    1 分布式网络介绍 1.1 Kad网介绍 1.2 Kad网络节点距离 1.3 K桶 1.4 Kad通信协议 2 邻居节点 2.1 NodeTable类主要成员 2.2 邻居节点发现方法 2.3 邻居节 ...

  5. Kubernetes Pod概念与网络通讯模式

    Kubernetes 要掌握的知识点 Pod概念 Pod控制类型 ReplicationController&ReplicaSet&Deplovment ★Deployment HPA ...

  6. 恩布企业即时通讯软件,EntboostChat 1.4.2发布,iOS开源IM

    为什么80%的码农都做不了架构师?>>>    恩布企业即时通讯软件,iOS苹果开源手机客户端 EntboostChat 发布 1.4.2 版本. EntboostChat 是 iO ...

  7. 局域网即时通讯软件java_如何选择企业即时通讯软件?

    企业即时通讯工具是一种面向企业终端使用者的网络沟通工具服务,交流内容包括文字.界面.语音.视频及文件互发等.相对于个人即时通讯工具而言,企业即时通讯工具因为剔除了娱乐等因素,所以更加强调实用性.安全性 ...

  8. 如何选择企业即时通讯软件

    如何选择适合的企业即时通讯软件     目前来说,越来越多的大中型企业意识到上班时间使用个人通讯工具(IM)存在的危害(如:交流对象及交流内容的不可控.必须开通外网存在安全隐患等),并且已经开始寻求一 ...

  9. 恩布企业IM 1.9 版本,免费企业即时通讯软件

    恩布企业IM,开源企业IM,免费企业即时通讯,企业内部通讯平台,Entboost发布v1.9版本,主要版本更新内容: 管理中心增加企业客服座席管理功能,支持实现客服多个座席自动分配等: 增加视频服务器 ...

最新文章

  1. WDS Services Can't Start
  2. 边缘计算将吞掉云计算!
  3. Spring+SpringMVC +MyBatis整合配置文件案例66666
  4. ArrayList遍历
  5. web中生成水平树状结构的方法.
  6. 【数据结构和算法笔记】串详解:c实现
  7. red linux系统管理,Red hat Linux 系统管理篇 4
  8. cocos2dx-lua 骨骼动画spine使用心得(cocos2dx版本 3.17 spine版本3.6.53)
  9. ReactNative配合node.js实现的公司通讯录管理app
  10. 双主动桥隔离双向DC-DC变换器(三) 控制策略
  11. vue json对象转数组_vue-vue-router 快速了解,多看看能扎实基础
  12. 遵义微红科技社群直播分销系统精选最具市场营销的功能点
  13. python短信验证码_python发送短信验证码
  14. 茧数SCRM营销自动化行业案例 | 教育行业
  15. 水下自动循迹机器人_一种夜间巡逻机器人自动循迹方法
  16. 贪心(greedy)
  17. 怎么实现角色权限的分配_Choerodon猪齿鱼实践之角色管理
  18. cc2530裸机编程系列笔记1--定时器Timer1模模式的程序设计
  19. java h264 sps解码,H264 SPS解析
  20. 【转】OpenVZ虚拟化开源项目简介

热门文章

  1. C语言判断日期有效性以及根据年月日输出星期几
  2. HTML标签之文档结构标签
  3. 2010年8月9日 流水账
  4. HBuilderX 百度网盘下载链接
  5. 删除autorun.inf病毒的批处理 简单三招预防
  6. DeFi基本概念-开发人员必看
  7. 嵌入式系统设计有哪几个方向
  8. 2020年系统规划与管理师上午真题及答案解析
  9. python文件读取方法read(size)的含义是_Python file read()方法
  10. free Code Camp Slasher Flick(截断数组)