前提 http调用过慢(很多原因:地域、http首次调用加载会慢,项目初始化慢),排除这些外,更多是tcp的来回次数决定了性能,通过Wireshark研究了下http,gRPC及netty每次调用的请求次数。
三次握手
无论哪种方案, 都脱离不开三次握手。握手的协议如下:
文章图片
通过Wireshark,可以清晰的看到三次握手。
第一次:客户端请求握手。
文章图片
第二次:服务端表示收到了握手请求, 并返回给客户端可以握手了。
文章图片
【.Net|http,grpc及netty的抓包及速度测试】第三次:客户端进行握手。
文章图片
Http请求
文章图片
截图中包含了3次握手和调用结束时关闭链接的分手,因为http调用一般都是释放链接。总共9次来回。
gRPC请求
文章图片
图中没有包含握手,会有7次来回,来回详情还需研究。
通过netty进行socket请求
文章图片
图中没有包含握手,会有4次来回。
1.客户端发服务端一个请求。
2.服务端说收到了,本次请求完成了。
3.服务端处理完后, 返回数据到客户端。
4.客户端说收到了。本次返回完成了。
结论
写了三个功能相同的服务端,通过调用发现, 调用时间和调用次数成正比。
在网络好的情况下,使用http在客户端和服务端之间通讯没有问题。在不太稳定或ping值过高时,建议通过tcp代理(可以通过netty搭建代理服务器),减少http带来的tcp请求,到服务端再进行http请求,会提高访问速度。
推荐阅读
- 记一次 .NET 某药品仓储管理系统 卡死分析
- IIS发布.net连接不上数据库解决办法
- 浅谈.NET 6 中 gRPC 的最新功能
- 利用Visual Studio 2017的扩展开发(VSIX、ItemTemplate) 快速实现项目的半自动化搭建
- C#进度条实现
- .net|利用MSXML2.XMLHTTP的无刷新技术
- 配置VS2008中文版调试.netframework源代码
- .net|解决Win8.1下VS2005编辑报错的问题