Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1857062
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 架构设计与优化

2014-01-11 14:36:04

      调用shutdown单独关闭输入管道或者输出管道,这种方式是比较安全的一种做法。因为如果服务器的输入端和输出端均被关闭,那么用户此时并不知情,将导致用户的输入被重定向,服务器返回的失败的连接将会清空客户端操作系统中的数据缓冲区。比如用户在网页中的任何的输入的数据将会被清空。所以应尽量使用shutdown,而非close,close会将输入端和输出端的socket均被关闭,RST一般为TCP层发出,如下图所示:

     使用keepalive 主要是为了减少TCP三次握手与关闭时带来的TIME_WAIT的时延,为了减少网络开销,使用keepalive来在建立的一个TCP连接上执行多个HTTP请求,这样可以带来很好的用户体验。
     比如访问百度首页的时候,加载js或者css脚本的时候,会在Connection里面写入keep-alive,并指定Transfer-Encoding 为chunked 表示分块传输,什么时候关闭由服务器端决定,以达到加速小文件传输的效率。


如果服务器端设置的keepalive,长时间没有得到客户端的响应,nginx会根据定时器的实际情况将该条连接断开。当有多条连接的时候,nginx就需要维护多个定时器,nginx的方法是:
设置一个超时时间,然后将这个时间放入到rbtree里面,每次要进行epoll_wait等待的时候,都需要设置超时时间,此时只要寻找rbtree当中最小的超时时间(绝对时间,不是时间段)即可。
涉及:
ngx_epoll_module的ngx_epoll_process_events
ngx_event_find_timer()寻找最早过期时间。

我们可以使用Telnet来模拟浏览器对服务器的访问,来测试一下nginx的反应行为。
nginx会对每个不同的请求来做不同的判断:
当HTTP请求报文为
GET / HTTP/1.1
Host:


此时,返回的是一个HTTP响应报文,但是这个TCP连接并没有被断开,还可以继续使用,但是当使用HTTP/1.0协议的时候,发现nginx会自动断开这个连接。

点击(此处)折叠或打开

  1. root@asus-desktop:~# telnet localhost 80
  2. Trying ::1...
  3. Trying 127.0.0.1...
  4. Connected to localhost.
  5. Escape character is '^]'.
  6. GET / HTTP/1.1
  7. Host:localhost
  8. HTTP/1.1 200 OK
  9. Server: nginx/1.2.9
  10. Date: Fri, 21 Feb 2014 07:06:05 GMT
  11. Content-Type: text/html
  12. Content-Length: 612
  13. Last-Modified: Fri, 21 Feb 2014 06:24:49 GMT
  14. Connection: keep-alive
  15. Accept-Ranges: bytes
  16. ////////////
  17. Welcome to nginx!

  18. Thank you for using nginx.

  19. GET / HTTP/1.0
  20. Host:
  21. HTTP/1.1 200 OK
  22. Server: nginx/1.2.9
  23. Date: Fri, 21 Feb 2014 07:06:59 GMT
  24. Content-Type: text/html
  25. Content-Length: 612
  26. Last-Modified: Fri, 21 Feb 2014 06:24:49 GMT
  27. Connection: close
  28. Accept-Ranges: bytes
  29. Welcome to nginx!
  30. Connection closed by foreign host.





阅读(5199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~