高性能网络编程框架netty篇

  1. 为什么会发生粘包和拆包的问题?
  • 操作系统在发送TCP消息数据的时候,底层会有一个缓冲区。这个缓冲区会有一个大小size。当一个请求的数据量没有达到size的时候,系统会把多个请求的数据合并发送,此为粘包;当一个请求的数据量超过size的时候,系统会把这个数据量大的请求的数据拆成多个数据包来发送,此为拆包。
  1. netty是如何解决粘包和拆包的?
  • 客户端在每次发送数据包的时候,大小固定为缓冲区大小size。如果不足size,用空格来凑。如果要发送的数据大于缓冲区大小怎么办?分多次发送。netty中提供了FixedLengthFrameDecoder这个类来处理固定大小数据包的粘包和拆包问题。
  • 客户端在每个包的结尾用特殊的分隔符来标识一个完整的数据包的结束,比如\r\n。读到特殊的分隔符即得到一次完整的数据包。netty中提供了LineBasedFrameDecoderDelimiterBasedFrameDecoder来支持这种方式。
  • 消息分为消息头和消息体。在消息头中记录一次消息数据的长度。读够记录的长度即得到一次完整的数据包。netty中提供了LengthFieldBasedFrameDecoderLengthFieldPrepender来支持这种方式。
  • 自定义协议来处理粘包和拆包问题。netty中可以通过继承LengthFieldBasedFrameDecoderLengthFieldPrepender或者是通过实现MessageToByteEncoderByteToMessageDecoder来支持这种方式。
  1. netty有哪些特征?
  • 异步的,事件驱动的网络通信框架。
  1. 同步和阻塞有什么区别?
  • 同步指的是两个对象之间的关系;而阻塞指的是一个对象的状态。
  • 同步与异步是针对被调用者说的;阻塞和非阻塞是针对调用者说的。
  • 同步:A调用B,B执行完了有结果了再返回。
  • 异步:A调用B,立即返回,不用等待,当B处理完之后会通过事件通知的方式或者是回调函数的方式来告诉A结果。
  • 阻塞:A调用B,A会被挂起,一直等待B的结果,直到得到B的返回结果,A才能继续执行。
  • 非阻塞:A调用B,A不用被挂起,A可以继续去做其他的事情,等B返回结果再处理返回的消息数据。
  1. http请求中的put方式和patch方式有什么区别?
  • put:修改,传参是修改后的全量数据
  • patch:修改,修改哪个字段,传哪个字段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值