Chinaunix首页 | 论坛 | 博客
  • 博客访问: 750042
  • 博文数量: 116
  • 博客积分: 923
  • 博客等级: 准尉
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-06 21:43
个人简介

一直帮老板搬运代码!!!

文章分类
文章存档

2013年(47)

2012年(69)

分类: LINUX

2013-02-22 11:31:17

//看一下接收和发送长度
//客户端接收
n = c->recv(c, b->last, size);
0x775180 "GET / HTTP/1.1\r\nHost: localhost:8888\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.9) Gecko/20110412 CentOS/3.6.9-2.el6.centos Firefox/3.6.9\r\nAccept: text/html,application/xhtml+xml,"...

//客户端发送给后端服务器前,被翻译(解析)成后端代理服务器的url
writev
0x725590 "GET / HTTP/1.0\r\nHost: tomcat_server\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.9) Gecko/20110412 CentOS/3.6.9-2.el6.centos Firefox/3.6.9\r\nAccept: text/html,appl"...

总结,转换时代理服务器对请求说做的事就是,把请求的链接进行rewrite成反向代理的链接。


//看一下接收长度
//后端服务器返回,其实它也接受了一次把所有内容接受
n = c->recv(c, u->buffer.last, u->buffer.end - u->buffer.last);
0x726480 "HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nAccept-Ranges: bytes\r\nETag: W/\"7446-1361175134000\"\r\nLast-Modified: Mon, 18 Feb 2013 08:12:14 GMT\r\nContent-Type: text/html\r\nContent-Length: 7446\r\nDate: Fri, "...


//发送的时候会循环放到writev里面
ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)

cl->buf:
//第一次
0x725be8 "HTTP/1.1 200 OK\r\nServer: nginx/1.0.12\r\nDate: Fri, 22 Feb 2013 01:21:25 GMT\r\nContent-Type: text/html; charset=utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nVary: Accept-Encoding\r\nETag: W/\""...

//第二次
0x7260c0 "ae6\r\n"

//第三次
0x6e7f20 "\037\213\b"

//第四次
0x78f1a0 "\305Y\371o\033\271\025\376\071\376+\230Iws@\322\370h\220D\221\265U|\300\332\372H-\245\351b\261XP3\224\304d4\234\220\034\313n\261\377{\277GR\322\214$\aq\333\240\006\022\035C>\276\343{\a?u\036\067\233;\214\235\313D\344F\244\314*f\247\202\365\n\236\340e\240\306v\316\265`\247\252\314Sn\245\312\331\263\336\340\364\071\303G\241\231\312\005S\232\315\224\026\020\222\250\334j9*-\276\312\274@\306'Z\210\231\310\255i16\020\302I\277\274\032\366\217N\330Xf\202\245\322\370M8|.\355\024r\354T\032\066W\372\063\033C\022OSI\a\363\214\311\034_\314\274\032ZL\270Ne>\301\261\305\235\226\223"...

//第五次
0x4c5390 "\r\n0\r\n\r\n"

//发送长度
send = 3095

//可见是一次性发送,这里发送的是文字的内容

//相关设置后
if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,(const void *) &tcp_nodelay, sizeof(int)) == -1) fd = 9

ngx_reusable_connection(c, 1);

//接收图片信息,客户端发起接受图片信息(tomcat的做法吧)

//客户端给服务器发送
n = recv(c->fd, buf, size, 0); c->fd = 9
0x775180 "GET /tomcat.gif HTTP/1.1\r\nHost: localhost:8888\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.9) Gecko/20110412 CentOS/3.6.9-2.el6.centos Firefox/3.6.9\r\nAccept: image/png,image/*;q=0."...

//发送前
0x725590 "GET /tomcat.gif HTTP/1.0\r\nHost: tomcat_server\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.9) Gecko/20110412 CentOS/3.6.9-2.el6.centos Firefox/3.6.9\r\nAccept: imag"...

//这里需要重新链接后端服务器

//给服务器发送
rc = writev(c->fd, header.elts, header.nelts); fd = 10

//客户端然后接受
n = c->recv(c, u->buffer.last, u->buffer.end - u->buffer.last);
0x7851a0 "HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nAccept-Ranges: bytes\r\nETag: W/\"1934-1361175134000\"\r\nLast-Modified: Mon, 18 Feb 2013 08:12:14 GMT\r\nContent-Type: image/gif\r\nContent-Length: 1934\r\nDate: Fri, "...

0x725aa8 "HTTP/1.1 200 OK\r\nServer: nginx/1.0.12\r\nDate: Fri, 22 Feb 2013 01:21:25 GMT\r\nContent-Type: image/gif\r\nConnection: keep-alive\r\nAccept-Ranges: bytes\r\nETag: W/\"1934-1361175134000\"\r\nLast-Modified: Mon, 18 "...

//然后分别给客户端发送


总结:
接受,只会接受一次;客户端请求接受后,解析成后端代理服务器的地址,发送给客户端;后端服务器返回内容后,也只接受一次(tomcat服务器会根据图片进行重新请求,重新链接)

发送,除了错误会用sendfile发送文件,同时发送文件头外;后端服务器的发送会组合成writev进行一次发送。








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