免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

HTTP服务器实现技术细节剖析--深入学习Apache和Nginx(获奖名单已公布-2012-11-15) [复制链接]

论坛徽章:
0
51 [报告]
发表于 2012-10-27 23:54 |只看该作者
如何处理http协议并不难,详细看一下对应的两个主要文档rfc1945和rfc2616,然后再根据需要可看一下其它相关rfc文档即可。

nginx对http协议的解析处理没有用到什么先进的东东,主要是根据标准文档做状态推进(具体通过enum数据结构来标记),比如请求头的解析:
    enum {
        sw_start = 0,
        sw_method,
        sw_spaces_before_uri,
        sw_schema,
        sw_schema_slash,
        sw_schema_slash_slash,
        sw_host_start,
        sw_host,
        sw_host_end,
        sw_host_ip_literal,
        sw_port,
        sw_host_http_09,
        sw_after_slash_in_uri,
        sw_check_uri,
        sw_check_uri_http_09,
        sw_uri,
        sw_http_09,
        sw_http_H,
        sw_http_HT,
        sw_http_HTT,
        sw_http_HTTP,
        sw_first_major_digit,
        sw_major_digit,
        sw_first_minor_digit,
        sw_minor_digit,
        sw_spaces_after_digit,
        sw_almost_done
    } state;
上面对应这样的情况:GET / HTTP/1.1

    enum {
        sw_start = 0,
        sw_name,
        sw_space_before_value,
        sw_value,
        sw_space_after_value,
        sw_ignore_line,
        sw_almost_done,
        sw_header_almost_done
    } state;
上面对应这样的情况:Accept:text/css,*/*;q=0.1

论坛徽章:
0
52 [报告]
发表于 2012-10-28 00:09 |只看该作者
当然,上面只提到了两个示例情况,但对于HTTP其它情况的处理,也基本是根据这两个rfc文档来的,无需把它们看得特别复杂。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
53 [报告]
发表于 2012-10-28 17:21 |只看该作者
fengyun530 发表于 2012-10-25 15:14
虽然有php-fpm的支持,但是处理动态php类的稳定性上目前还是apache要强于nginx.尺有所短,寸有所长,

我比较关心apache和nginx在php上的表现,能提供一个测试之类的数据吗?

论坛徽章:
0
54 [报告]
发表于 2012-10-28 20:58 |只看该作者
有点看不懂了,继续学习

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
55 [报告]
发表于 2012-10-28 23:04 |只看该作者
是滴, 状态机这种简单的思想可以解决大问题.

其实已经有同学将nginx的http解析函数摘出来做成了开源项目, 叫做: http-parser.

周末时候, 我的开源Server支持了Http协议, 协议的解析部分依赖了http-parser开源项目, 让整个事情变得更加简单了, 有兴趣的同学可以了解一下http-parser以及我的Server项目是如何应用http-parser快速的支持Http协议的.

Server Git:https://github.com/liangdong/Server/
Http-parser Git:https://github.com/joyent/http-parser

lenky0401 发表于 2012-10-27 23:54
如何处理http协议并不难,详细看一下对应的两个主要文档rfc1945和rfc2616,然后再根据需要可看一下其它相关 ...

论坛徽章:
0
56 [报告]
发表于 2012-10-29 09:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
57 [报告]
发表于 2012-10-29 14:49 |只看该作者
关于连接和占资源的处理,一般大规模服务器都是异步模式,网络模拟收到一个请求,放到处理队列,然后继续收下一个。处理模块处理完成再置标志,表示要回复,网络模块再把回复发给请求者。 这样每个连接占用资源的情况是对等的,反应效率也高。tomcat代码没看过,如果每个连接开一个线程专门来处理,那同时连接数肯定不能太多。

论坛徽章:
0
58 [报告]
发表于 2012-10-29 15:23 |只看该作者
我现在在用G-WAN。。。

论坛徽章:
3
CU大牛徽章
日期:2013-05-20 10:43:41CU大牛徽章
日期:2013-05-20 10:44:06CU大牛徽章
日期:2013-05-20 10:44:16
59 [报告]
发表于 2012-10-29 15:35 |只看该作者
sopato 发表于 2012-10-29 15:23
我现在在用G-WAN。。。


gwan是个什么东东啊?

论坛徽章:
4
CU大牛徽章
日期:2013-04-17 11:50:25CU大牛徽章
日期:2013-04-17 11:50:33CU大牛徽章
日期:2013-04-17 11:50:39CU大牛徽章
日期:2013-04-17 11:50:44
60 [报告]
发表于 2012-10-29 15:42 |只看该作者
我觉得Nginx的配置相对简洁,容易一些。一目了然。
并且负载均衡也还不错,当然适用于小的站点,因为设计到连接数*2的问题。
在小的并发量下,表现的很棒。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP