本人对 NIO 的理解程度有限,网上的资料又不够详细,很多东西都搜不到,所以在此问问各位大神,如果兴趣的话还望指教。 谢谢啦。
客户端发起一个 http 请求到服务端
-
此时 selector 会把 read 状态的 channel 给获取到 并进入迭代, 这个 channel 里包含本次请求的所有报文吗? 注意是本次请求。
-
会不会因为网络原因或者其他常见原因 导致数据有断层,比如客户端发送了 1234,但是 channel 里是 12 34.从而导致读 channel 的时候在断层处 返回 0,而导致读取停止?
分片传输
假如有这样一个 http 报文
POST /demo HTTP/1.1
content-type:application/json
content-length:1000
12345678910qwertyuioasdfghjkl
我以分两片为例子。
分片传输是将报文分为这样的两份( A )?
第一片
POST /demo HTTP/1.1
content-type:application/json
content-length:50
12345678910qwer
第二片
POST /demo HTTP/1.1
content-type:application/json
content-length:50
tyuioasdfghjkl
还是这样的两份( B )?
第一片
POST /demo HTTP/1.1
content-type:application/json
content-length:100
12345678910
第二片
qwertyuioasdfghjkl
如果是 B 的分法,那么 NIO 在收到第二片之后,丢给协议层,这个数据里没有任何特征,协议层是怎么判断出这个报文属于什么协议,从而给对应的协议解析器来进行解析的呢?
NIO 有没有什么高效的办法来 判断本次请求的协议类型,除了分析报文里的特征
我现在是根据报文里的特征来分析的,感觉不太对劲。