-
首先,http协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接
-
然后,http也可以使用protobuf这种二进制编码协议对内容进行编码
-
也就是说连接建立与断开的开销和序列化协议并不是主要影响因素
-
二者最大的区别还是在传输协议上
-
http的传输协议中header部分有很多冗余的部分,像Content-Type、Last-Modified、Expires等
-
即使http body是使用二进制编码协议,header头的键值对却用了文本编码,非常占用字节数
-
而自定义的tcp协议,可以精简传输内容,传输效率更高。比如下面的自定义tcp协议的报文:
-
1-4 byte,length
5-8 byte,type
9-16 byte,package_id
17-length+16 byte,package_data
-
报头占用的字节数也就只有16个byte,大大地减少了传输内容。高并发情况下,少几个字节,乘以巨大的请求数量,能带来庞大的收益
-
因此,对于性能要求比较高的系统来说,通常使用自定义tcp协议的rpc来做后端进程通信
-
其实使用http协议比较多的还是前后端的通信,原因在于主流网页游览器都支持http协议,而且http在缓存、幂等重试乃至cookie这种浏览器安全相关的方面做了很多功夫