高并发服务器的设计:fastcgi的设计

服务器开发中不何或缺的要使用fastcgi,其使用方法如下:

while( FCGI_Accept() >= 0 ){
                printf( "Content-type: text/plain \r\n"
                "Content-Length: %d\r\n"
                "Connection: close\r\n\r\n%s\r\n", strlen( buffer ), buffer );
        }

facgcgi 头文件有如下宏:

#undef  fprintf
#define fprintf  FCGI_fprintf
#undef  printf
#define printf   FCGI_printf

可以看出,已经对printf函数进行了宏转向,在程序里的 printf 不再是标准输出了。这样就有一个问题,如果想调试打印信息到stdout中,就不行了。

现实开发中,可能会出现各种问题,有时候的确需要打印出一些信息,这时候可以修改 fcgi_stdio.h头文件,改成如下:

#undef  _fprintf
#define _fprintf  FCGI_fprintf
#undef  _printf
#define _printf   FCGI_printf

在程序中的相应地方也要换成相应的宏。

fastcgi 的解析可以通过这个函数:

char *getenv(const char *name)

有如下几类参数:

CONTENT_TYPE

CONTENT_TYPE 得到请求类型
CONTENT_LENGTH 正文段长度
QUERY_STRING 请求字串

以如下一段HTTP请求报文为例:

GET /s?

ie=utf-8&bs=%E8%BF%99%E6%98%AF&f=8&rsv_bp=1&rsv_spt=3&wd=%E6%9C%8D%

E5%8A%A1%E5%99%A8%E5%BC%80%E5%8F%

91&rsv_sug3=11&rsv_sug=0&rsv_sug4=609&rsv_sug1=2&inputT=32681 HTTP/1.1 

Host: www.baidu.com
Connection: keep-alive
Content-Type: text/html;charset=utf-8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) 

Chrome/26.0.1410.64 Safari/537.31
Referer: http://www.baidu.com/s?wd=%E8%BF%99%E6%98%

AF&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-

8&rsv_sug3=4&rsv_sug=0&rsv_sug4=240&rsv_sug1=3&inputT=2835
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: BAIDUID=A83324E58AE26486E46FC49ED127891B:FG=1; BDSVRTM=163; 

H_PS_PSSID=1439_2448_2454_2256_1788_2249; WWW_ST=1369271667063

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索printf
, define
, fprintf
, baidu
, fastcgi
请求defined
,以便于您获取更多的相关知识。

时间: 2024-08-03 20:57:14

高并发服务器的设计:fastcgi的设计的相关文章

高并发服务器的设计之连接池的设计

高并发服务器需要有一些池的设计,如内存池,连接池,数据库连接池. 池(pool)的设计 主要考虑到一些资源的频繁申请和释放,尤其是在高并发的服务器中,几万甚至几十万并发每秒,设计 人员不得不去考虑这些. 比如数据库连接池(sql pool),是通过TCP来通信的,属于IO类,有 一定的延时,在高并发系统中频繁的创建会严重影响系统性能. 内存( mem )的分配是要涉及锁 ( mutex )的,有锁就会有延时,因此可以在开始申请一大块内存,后面进行分配与释放,来节省锁开 销. 服务器的连接处理不仅

高并发服务器的设计之架构与瓶颈的设计

做架构设计,难免有时候被人问及系统的瓶颈在哪,那首先来了解下什么是瓶颈? 打个形象 的比方,人的嘴巴可以吞下一整个面包,但是却咽不下去,因为食管不给力,它比较细,所以嘴巴能吞 下的食物大小要受到食管的粗细限制. 城市内部每天会产生几十万件跨城快递,可是跨城的交 通不给力,只允许走小型卡车,一卡车一次就能装几千件,一天下来也不一定能投送的完. 人 在一定时间内能咽下多少食物,货运公司在一天运送多少货物,物理上叫做吞吐量,系统整体的吞吐量 等于最小区域的吞吐量. 下面这张图能够反映: 土黄色管子的流

高并发服务器的设计之内存池的设计

不同的业务,设计也不尽相同,但至少都一些共同的追求,比如性能. 做服务器开发很多年 了,有时候被人问到,服务器性能是什么呢?各种服务器间拼得是什么呢? 简单的回答就是QPS ,并发数,但有时候想想也许也不对. QPS与并发数是针对同样的业务而言的,业务不同,相同 的服务器能承受的压力也会不同. 性能,也许可以打个俗点的比方: 服务器就是一艘船 ,性能就是船的容量,开的速度,行得是否稳当. 该用的用,该省的省.能用内存就别用IO, CPU则能少用就少用,相同的QPS,CPU和内存用的少点的性能就要

《高并发Oracle数据库系统的架构与设计》一第1章 大 道 至 简

第一部分 内 政 篇 万物之始,大道至简,衍化至繁. --老子,<道德经> 第1章 大 道 至 简 万物之始,大道至简,衍化至繁.世间一切事物在刚刚开始的时候,都是非常简单的,是为大道,随着事物不断地发展,其衍变出来各种复杂的局面.然而,追本溯源,仍然会发现复杂局面下真正在左右事物的还是那些最基本的东西--大道.如果能牢牢把握住这些被认作是"大道"的东西,再复杂的局面也自然会变得简单. 近些年来,在数据库领域里,可谓群雄逐鹿,志在中原.他们各自有各自的特色,相互间也甚是喜欢

《高并发Oracle数据库系统的架构与设计》一1.1 初见高并发

1.1 初见高并发 高并发这个概念并不新鲜,可以说有数据库的地方都有可能面临高并发的问题.在数据库里,高并发问题主要集中在两个方面:读的高并发.写的高并发,两者看起来都不是很复杂,然而实际情况往往是读和写会交织在一起,并同时呈现出高并发的问题.这个时候,相信很多读者都会提出一个观点:做读写分离嘛.是的,这是一个不错的主意,但只是一个治标不治本的主意.业务系统的耦合度很高,是不可能实现业务层级的读写分离的.在架构设计的过程中,不能驻足于技术层面,还是需要渗透到业务层面去的.不论是业务驱动技术,还是

《高并发Oracle数据库系统的架构与设计》一2.5 索引维护

2.5 索引维护 索引对于性能保障的重要性是不言而喻的,一个优质的索引是性能的润滑剂,相反,劣质的索引将是性能的"绞肉机".通过2.4节的介绍,我们了解到一个设计优良的索引,在经过日常业务应用,特别是OLTP的高并发"摧残"之后,将变得满目疮痍,原本优质的索引也可能转变为劣质的. 这就需要DBA的介入,找到劣质的索引,并恢复其优质的本相.索引的后期维护可能是DBA们日常维护工作中非常重要的一部分,同时也可能是最费时费力的一部分.有人可能会简单地概括一下:"

《高并发Oracle数据库系统的架构与设计》一导读

前 言 为什么要写这本书 写一本Oracle数据库方面的技术书籍,是我一个持续了四五年的想法.本着自我总结和快乐分享的初衷,不只一次地咨询过eygle大师关于写书的细节,eygle大师也热情地予以指导.遗憾的是,总是因为这样那样的原因,这个想法迟迟不能落地. 2013年的夏天,我有幸作为微博特使参与了甲骨文全球大会(Oracle Open World)上海站的活动,跟一位甲骨文的朋友闲谈中,不经意聊到了与Oracle数据库"共事"已经快十年了.朋友说我应该有不少心得了,鼓励我花一年的时

《高并发Oracle数据库系统的架构与设计》一2.3 索引设计优化

2.3 索引设计优化 现在,我们知道了B树索引的结构特点,也了解到其对查询和排序优化的意义,但是这并不代表我们就能建好用好索引了.在实际工作中,是不是还是会遇到走了索引反而查询变慢的情况呢?虽然说不是所有的情况下索引扫描都是优于全表扫描的,但是对于一套设计成熟的系统来说,索引扫描往往是值得坚持的,应该定期进行全库SQL语句执行计划的审查,抓出全表扫描的SQL进行优化. 说一千道一万,我们创建索引就是为了使用索引,尽可能地使查询操作能够走索引.但是,很遗憾,不是我们说走索引就能走索引,还是需要取决

《高并发Oracle数据库系统的架构与设计》一1.3 在Oracle的世界里

1.3 在Oracle的世界里 如果你是一位Oracle数据库的使用者,那么我们说你将是立足在Oracle的世界里的.本书的主旨也是以此为出发点,立足Oracle的世界,以海纳百川的胸怀选择性吸收各种数据库的使用.立足点的不同,同样会影响到我们视角不同,那么在Oracle的世界里的高并发数据库系统架构设计将会是怎么样的呢?这也将是本书需要给读者们介绍的.相信在每一个Oracle数据库用户的眼中都有其独特的风景,对Oracle的理解可以是技术的,更可以是艺术的.在讨论中,我经常提及的一个观点:"将

《高并发Oracle数据库系统的架构与设计》一1.4 本章小结

1.4 本章小结 纵观本章,主要介绍了一下高并发Oracle数据库系统的特点.难点以及架构和设计的基本思路,并闲话了一些时下流行的话题.下一章我们将进入本书的正题,给读者们介绍如何在Oracle数据库里进行高效索引的设计.