基于TCP的短链接
野火客户端协议栈和专业版IM服务在2023年4月份开始支持了TCP短链接。本文将详细讲述一下什么是TCP短链接、什么场景下使用TCP短链接和怎么使用TCP短链接。
1. 短链接
野火协议栈是基于开源的微信mars连接库进行二次开发而来的。mars有个很重要的特性是支持长短链接:客户端在线时,始终有一个tcp的长链接跟服务器保持链接,当客户端有数据发给服务器时,如果长链接已经有较繁重的任务在执行了,则mars会发起一个HTTP的请求到服务器,请求结束后,HTTP的链接将被释放,这个HTTP链接就被称为短链接。采用长短链接结合的好处能够提高用户的使用体验,详情可以参考mars的说明。
2. 短链接的问题
社区版IM服务的短链接基于mars原有连接方式,仅支持HTTP,不支持HTTPS。在某些对安全比较敏感的客户那里,HTTP被一刀切地禁止,这样社区版协议栈就无法工作了。实际野火的所有数据都经过AES加密,安全性完全没有问题,但受限于政策,社区版原有方案无法满足这些特殊的安全政策要求。
专业版IM服务支持TLS连接方式,开启后短链接走HTTPS、长链接走TLS over TCP。如果客户只是要求传输通道加密,可以优先考虑使用TLS连接方式,参考野火IM支持TLS与KCP连接方式。如果HTTP/HTTPS被完全禁止,只能使用TCP连接,则可以使用本文介绍的TCP短链接方案。
3. 基于TCP的短链接。
因此我们在不舍弃长短链接特性的情况下,开发了基于TCP的短链接。基于TCP的短链接使用了野火私有定制的协议,而且同样使用AES加密,安全性没有什么变化还是同样的安全。同HTTP的短链接一样,一次请求建立一个TCP链接,请求结束后链接就被释放了。
4. 服务端HTTP端口和TCP短链接端口
IM服务的HTTP端口是多用途的,除了原生客户端短链接外,还有给JS客户端(Web客户端和小程序客户端)服务发现用,还有给机器人API和频道API使用。所以即使采用TCP短链接端口,也需要同时开启该端口;专业版IM服务此时可以只启用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,在连接之前调用这个方法即可。