基于TCP的短链接
野火客户端协议栈和专业版IM服务在2023年4月份开始支持了TCP短链接。本文将详细讲述一下什么是TCP短链接、什么场景下使用TCP短链接和怎么使用TCP短链接。
1. 短链接
野火协议栈是基于开源的微信mars连接库进行二次开发而来的。mars有个很重要的特性是支持长短链接:客户端在线时,始终有一个tcp的长链接跟服务器保持链接,当客户端有数据发给服务器时,如果长链接已经有较繁重的任务在执行了,则mars会发起一个HTTP的请求到服务器,请求结束后,HTTP的链接将被释放,这个HTTP链接就被称为短链接。采用长短链接结合的好处能够提高用户的使用体验,详情可以参考mars的说明。
2. 短链接的问题
mars的短链接只支持http协议栈,无法支持https协议。在某些对安全比较敏感的客户哪里,http被一刀切地禁止,这样野火协议栈就无法工作了。实际野火的所有的数据都是经过AES加密的,安全性完全没有问题,但受限于政策,现有方案无法满足他们特殊的安全政策要求。
3. 基于TCP的短链接。
因此我们在不舍弃长短链接特性的情况下,开发了基于TCP的短链接。基于TCP的短链接使用了野火私有定制的协议,而且同样使用AES加密,安全性没有什么变化还是同样的安全。同HTTP的短链接一样,一次请求建立一个TCP链接,请求结束后链接就被释放了。
4. 服务端HTTP端口和TCP短链接端口
IM服务的HTTP端口是多用途的,除了原生客户端短链接外,还有给JS客户端(Web客户端和小程序客户端)服务发现用,还有给机器人API和频道API使用。所以即使采用TCP短链接端口,也需要同时开启HTTP端口,此时可以只启用HTTPS服务,屏蔽掉HTTP服务。
由于原生客户端默认使用80端口,所以如果开启tcp短链接,那么HTTP端口就需要更换了,可以更换为其他端口。如果是企事业单位或政府单位野火可以提供定制端口的SDK。
5. 基于TCP短链接的限制
基于TCP的短连接不再支持IM服务内置的对象存储服务,必须使用minio或者云对象存储服务等独立的对象存储服务。
6. 什么时候使用TCP短链接
基于TCP的短链接仅建议用在禁止使用HTTP的国企或者政府单位环境内,其他情况下野火还是推荐使用HTTP的短链接。
7. 如何使用TCP短链接
需要服务端和客户端同时开启才行。首先在服务器端,打开配置文件中的下面配置。
short_link_tcp_port 80
short_link_local_tcp_port 80
端口是客户端使用的短链接端口,默认是80端口(如果是定制端口的情况,这里就需要同步修改),如果跟HTTP端口冲突,那就需要同步修改HTTP端口:
##客户端短链接HTTP端口
http_port 8000
##本地绑定的HTTP端口
local_port 8000
修改配置后重启IM服务。然后再修改客户端,客户端SDK有个接口useTcpShortLink
,在连接之前调用这个方法即可。