Nettyが高速で送信するのはなぜですか

HTTPサーバーの原理:

  1  创建一个ServerSocket,监听并绑定一个端口
  2  一系列客户端来请求这个端口
  3  服务器使用Accept,获得一个来自客户端的Socket连接对象
 
  4  启动一个新线程处理连接
       1) 读Socket,得到字节流
       2) 解码协议,得到Http请求对象
       3) 处理Http请求,得到一个结果,封装成一个HttpResponse对象
       4) 编码协议,将结果序列化字节流
       5) 写Socket,将字节流发给客户端
 
  5  继续循环步骤3

HTTPサーバーは、エンコードとデコードのプロトコルがHTTPプロトコルであるため、HTTPサーバーと呼ばれます。プロトコルがRedisプロトコルの場合は、Redisサーバーになり、プロトコルがWebSocketの場合は、WebSocketサーバーになります。 。

Nettyを使用すると、コーデックプロトコルをカスタマイズし、独自の特定のプロトコルサーバーを実装できます。

NIOがBIOよりも速い理由:

1. BIOでは、クライアントがデータを送信するのを待つプロセスがブロックされるため、1つのスレッドが1つの要求しか処理できず
、マシンがサポートできるスレッドの最大数が制限されるため、BIOは高をサポートできません同時実行の理由。

2. NIOでは、ソケットが確立されると、スレッドはソケットを受け入れるためにブロックしませんが、要求をセレクターに渡します。
セレクターは引き続きすべてのソケットをトラバースします。ソケットが確立されると、スレッドに通知されます。 、次にスレッドは
データを処理してからクライアントに返します-このプロセスはブロックされているため、スレッドはより多くのリクエストを処理できます。

Nettyが高速で送信するのはなぜですか

Nettyの高速伝送は、実際にはNIOゼロコピーの機能に依存しています。Javaのメモリには、ヒープメモリ、スタックメモリ、文字列定数プールなどが
含まれます。その中で、ヒープメモリは最大のメモリ空間であり、Javaオブジェクトが格納される場所でもあります。通常、データを読み取る必要がある場合IOからヒープへメモリは
途中でソケットバッファを通過する必要があります。つまり、データの一部が最後に到達するために2回コピーされます。データの量が多いと、不要なリソースの浪費が発生します。
この状況に対応して、NettyはNIOのもう1つの主要機能であるゼロコピーを使用します。データを受信する必要がある場合、ヒープメモリの外部のメモリを開き、
データはIOからそのメモリに直接読み取られます。これらのデータは、nettyのByteBufを介して直接操作できるため、送信が高速化されます。

 

おすすめ

転載: blog.csdn.net/qq_32445015/article/details/102398636