聊聊如何设计千万级吞吐量的.Net Core网络通信! (2)

首先运行EchoAgent,按2,安装注册服务,用管理员身份运行。安装成功然后可以在服务里面找到刚刚安装的服务。

聊聊如何设计千万级吞吐量的.Net Core网络通信!


聊聊如何设计千万级吞吐量的.Net Core网络通信!


聊聊如何设计千万级吞吐量的.Net Core网络通信!


聊聊如何设计千万级吞吐量的.Net Core网络通信!

安装完成可以在服务上找到,再次按2就是卸载,这个是XAgent提供的功能

聊聊如何设计千万级吞吐量的.Net Core网络通信!


聊聊如何设计千万级吞吐量的.Net Core网络通信!

这时候按3,启动服务

聊聊如何设计千万级吞吐量的.Net Core网络通信!

代码解释

接下来看代码,服务启动的时候,执行StartWork。在这个时候实例化并启动NetServer,得到的效果就跟例程EchoTest一样,区别是一个是控制台一个是服务。停止服务时执行StopWork,我们可以在这里关闭NetServer。详细请看源码

聊聊如何设计千万级吞吐量的.Net Core网络通信!

必须有这个东西,你的网络服务程序,才有可能达到产品级。linux上直接控制台,上nohup,当然还有很多其它办法。以后希望这个XAgent能够支持linux吧,这样就一劳永逸了

1.3 压测

相关博客

只需要记住一个两个数字,.net应用打出来2266万tps,流量峰值4.5Gbps

两千万吞吐量的数字,当然,只能看不能用。因为服务端只是刚才的Echo而已,并没有带什么业务。实际工作中,带着业务和数据库,能跑到10万已经非常非常牛逼了。

我们工作中的服务可以跑到100万,但是我不敢,怕它不小心就崩了。所以我们都是按照10万的上限来设计,不够就堆服务器好了,达到5万以上后,稳定性更重要

网络编程的坑

主要有粘包

程序员中会网络编程的少,会解决粘包的更少!

1.4 网络编程的坎——粘包

普遍情况,上万的程序员,会写网络程序的不到20%,会解决粘包问题的不到1%,如果大家会写网络程序,并且能解决粘包,那么至少已经达到了网络编程的中级水平。

什么是粘包

举个栗子:客户端连续发了5个包,服务端就收到了一个大包。代码就不演示了,把第一个例程的这个睡眠去掉。

聊聊如何设计千万级吞吐量的.Net Core网络通信!


聊聊如何设计千万级吞吐量的.Net Core网络通信!

客户端连续发了5个包,服务端就收到了一个大包。

原因

很多人可能都听说Tcp是流式协议,但是很少人去问,什么叫流式吧?流式,就是它把数据像管道一样传输过去。

刚才我们发了5个 “你好”,它负责把这10个字发到对方,至于发多少次,每次发几个字,不用我们操心,tcp底层自己处理。tcp负责把数据一个不丢的按顺序的发过去。所以,为了性能,它一般会把相近的数据包凑到一起发过去。对方收到一个大包,5个小包都粘在了一起,这就是最简单的粘包。

这个特性由NoDelay设置决定。NoDelay默认是false,需要自己设置。如果设置了,就不会等待。但是不要想得那么美好,因为对方可能合包。

局域网MTU(Maximum Transmission Unit,最大传输单元)是1500,处于ip tcp 头部等,大概1472多点的样子。

更复杂的粘包及解决方法

A 1000 字节 B 也是 1000字节,对方可能收到两个包,1400 + 600。对方可能收到两个包,1400 + 600。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdxfg.html