IO NIO netty笔记

IO

  • demo: https://gitee.com/kwenj/leaning

tcp && http

  • bio: com.sirui.x.io.bio.IoStarter
  • nio: com.sirui.x.io.nio.NioStarter
    • 访问http://localhost:4010 可以看到后台日志
    • ServerSocketChannelWrapper.doRead.84 msg如果符合http协议,则浏览器可以看到返回的数据
  • http 请求头格式
    • 第一行 POST(请求方法) /(uri) HTTP/1.1(协议)
    • 第二行开始key-valu对的header
    • 直到空行
    • 请求体
 POST / HTTP/1.1
 Content-Type: text/plain
 User-Agent: PostmanRuntime/7.26.8
 Accept: */*
 Host: localhost:4010
 Accept-Encoding: gzip, deflate, br
 Connection: keep-alive
 Content-Length: 8

 asdfafds
  • http 响应头格式
    • 第一行HTTP/1.1 200 OK
    • 第二行开始key-valu对的header
    • 直到空行
    • 响应体

从tcp到http

  • BIO的服务端读取:SocketRunnable.34行 和 NIO的ServerSocketChannelWrapper.86行都需要协议来判断一次请求的数据的结束。
  • http协议表示请求数据结束的方式
    • get方式没有请求体
    • header中Content-Length表示请求体的长度,用于静态长度
    • 对方socket关闭连接
    • header中Transfer-Encoding:chunked,用于动态长度,成为分块传输编码,它编码的请求体格式为一行长度值(16进制),一行数据块,直到最后一行长度值为0,一行红数据块,每行以"\r\n"分割。因此最后结尾是"0\r\n\r\n";
    #body
    3
    con
    a
    sequence12

基于tcp的运用方式

  • http短连接
  • http的长轮询: 服务端收到客户端发来的请求后不直接响应,而是将请求hold住一段时间,在这段时间内如果数据有变化,服务端才会响应,如果没有变化则在到达一定的时间后才返回请求。这种方式能够大幅减少请求次数,减少服务端压力,同时能够增加响应的实时性。nacos的longPolling
    • https://www.jianshu.com/p/acb9b1093a54
    • 实现方案:servlet3.0的异步处理ServletRequest.startAsync
  • http的长连接 websocket
    • 长连接相对于短连接是一次连接,多次数据传输;多个调用方使用同一个传输通道,等待同一通道的数据响应。
    • https://www.cnblogs.com/kiwifly/p/11729304.html 服务端客户端
    • http://coolaf.com/tool/chattest 在线测试websocket
  • 短连接使用场景:由client访问server端返回数据,无状态
  • 长轮询使用场景:即时获取服务端数据的变化且有变化不频繁的特点。如nacos注册中心。
  • 长连接:即时获取服务端的数据,且数据变化较频繁,如即时通讯。长轮询和长连接的场景都有服务端往客户端推送数据,差异在推送数据的多少。

基于性能压榨的IO框架 netty

  • https://www.w3cschool.cn/essential_netty_in_action/essential_netty_in_action-un8q288w.html
  • 待续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值