当前位置: 首页 > 网络应用技术

Netty Advanced应用程序的粘袋和拆卸袋

时间:2023-03-05 19:51:06 网络应用技术

  例如,我们必须立即向服务器发送两条消息,并且客户端将其发送两次,因此从理论上讲,服务器也应接收第二个消息,第二个消息的内容是ABC / DEF,但这是不确定的。服务器将具有以下情况

  PARE:服务器一次接收多个消息。从理论上讲,客户端向服务器发送一条消息以接收一条消息,但是客户一次发送了几条消息,导致服务端一次接收多个消息。

  客户发送10条消息

  服务器仅接收一次,客户端已合并了10条消息并将其发送。这是粘袋

  拆卸:多次发送消息。例如,我想发送:ABC,第一台服务器接收AB,第二次接收,并且必须接收消息服务器几次。这是拆卸袋。

  客户发送的消息很大

  需要单独收到多次服务器。这是包装的拆卸。

  无论是Netty还是NIO,发送消息都是基于TCP协议。当TCP发送消息时,缓冲区为缓冲区。

  粘附的原因:消息的内容非常小,远小于缓冲区的长度。目前,缓冲区不会立即发送此消息,而是将其发送给其他消息。以这种方式发送和发送的合并有利于提高效率。例如,我想发送五条消息。消息的内容是:n,e,t,t,y和缓冲区最终可以零星发送这五个消息,而无需分开元素

  拆卸软件包的原因:如果此新闻很大,则不能安装缓冲区并不太大。目前,该新闻必须多次发送。这就像我们的火车运输一样,很多时候,当无法安装东西时,我们只能分开几次。

  实际上,粘附和拆卸的本质是因为TCP是流媒体协议,并且该消息是无限的。简而言之,服务器无法区分此消息是否是完整的消息。此消息可能是多次发送的消息,可能会多次发送此消息。如果我们可以解决消息边界的问题,那么我们自然可以解决粘袋和半袋的问题。因此,常见的是:固定长度法,分离主义方法,长度+内容方法

  Netty还提供了这四个实现:

  LineBasedFramedeCoder示例:

  例子

  原始:https://juejin.cn/post/7098529245433397255