Java学习总结(2.1.2) BIO阻塞网络编程

精贴 置顶
1521 0
作者:      发布时间: 2020-04-17 14:51:43

GET/servlet-demo-1.0.0/index HTTP/1.1

Cache-Control: max-age = 0

Accept: text / html

Accept-Language: zh-Hans-CN,zh-Hans;q=0.5

Upgrade-Insecure-Requests: 1

User-Agent: Chrome/64.0.3282.140

Accept-Encoding: gzip,deflate

Host: 127.0.0.1:8080

Connection: Keep-Alive


Http协议 - 请求数据包解析

第一部分:请求行,请求类型,资源路径以及HTTP版本。

第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息。

第三部分:空行,请求头部后面的空行是必须的请求头部和数据主体之间必须有换行。

第四部分:请求数据也叫主体,可以添加任意的数据。这个例子的请求数据为空。


--------------------------------

HTTP/1.1 200 OK

Content-length : 11


Hello World


第一部分:状态行。HTTP版本、状态码、状态消息。

第二部分:响应报头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息

第三部分:空行,头部后面的空行是必须的头部和数据主体之间必须有换行

第四部分:响应正文。可以添加任意的数据。这个例子的响应正文为“ Hello world”。



Http协议 - 响应状态码

1xx(临时响应)

2xx(成功)

3xx(重定向)

4xx(请求错误)

5xx(服务器错误)


BIO - 阻塞IO的含义

阻塞(blocking) IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

非阻塞(non-blocking) IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。

同步(synchronous) IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。

异步( asynchronous) IO:应用发送或接收数据后立刻返回,实际处理是异步执行的。


阻塞和非阻塞是获取资源的方式,同步/异步是程序如何处理资源的逻辑设计。

代码中使用的API: Serversocket#accept、 Input Stream#read都是阻塞的APl。

操作系统底层AP中,默认Socket操作都是 Blocking型,send/recv等接口都是阻塞的。


带来的问题:阻塞导致在处理网络I/O时,一个线程只能处理一个网络连接。











标签:

每日一句

如果花了足够多的时间考虑你的目标,你就能用自己的心看到、摸到、尝到和闻到那个目标,你不会轻易放弃。实现目标的欲望会给你足够的毅力克服哪怕是最令人生畏的障碍。在真的取得成功之前,你应该已经在头脑中达成目标。这样你就能承受任何暂时的痛苦,实现自己的梦想。

标签云

vue
最近综合
情绪巨婴是什么 12.18
普通蛋糕做法 05.31
玉米烤肠芝士面包做法 05.31
Mysql安装教程 - 绿色版 06.18
我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
Typora开发版⽆法使⽤解决⽅法 05.04
为什么无知者越自信? -- 达克效应 05.10
马斯洛需求层次理论 04.29
随机综合
Android开发,为什么Android不直接链接mysql数据库 04.12
最常见最有效的隐藏外连代码_防seo黑帽隐藏外连代码 10.09
中间件1.2.2-ActiveMQ支持的消息协议讲解 04.23
android TextView标签字体加粗的几种方法 04.08
玉米烤肠芝士面包做法 05.31
电商运营主要做什么? 10.08
中间件1.3.3-RabbitMQ持久化机制、内存/磁盘控制 04.29
开发者能力金字塔 04.29