在学习 Linux编程方面,最近我写了一个 web服务器程序,使用 linux下的纯 c写的, web服务器能基本实现动态服务请求和静态服务请求。但是我总觉得我的设计不是很好,下面我说一说我的设计,你们看看有没有什么更好的设计。
web服务器的静态服务请求的实现使用的是线程池,由主线程统一获得连接请求,然后将已连接描述符压到一个缓冲区中,线程池中的空闲线程从缓冲区中获得描述符(这里使用互斥量维持线程间的同步),如果发现是静态的请求,就直接回应请求,如果是动态请求,就将描述符压到另一个缓冲区中。
这里有一个线程,和一个进程池共同来服务动态请求。这个线程使用i/o 复用和进程通信,发现进程有空闲的就将缓冲区中的动态请求的描述符发送给这个进程,因此这个线程主要作为进程的调度。
进程通过生成一个子进程,调用服务器目录中的cgi 程序来服务动态请求。
虽然程序已经编出来了,但是我总感觉程序太复杂,为了实现两个简简单单的功能( 动态服务和静态服务) ,居然要使用如此多的复杂的技术。之所以使用线程,是因为他在性能方面高于进程,之所以使用线程池,是因为这样能减少后期生成线程的性能影响。之所以又使用进程,是因为我还不知道如何使用线程来服务动态请求。
我问过几个老师,但可能他们的方向没有在这里,因此都没有提出多少可行的建议。我总感觉这个设计方法不是很好,一定会有很多需要改进的地方,比如在设计复杂度上需要改进,比如在描述符的共享上会有更好的设计,等等。我也不知道apache 的设计是怎样的,希望大家讨论给点指点,非常感谢
分享到:
相关推荐
JavaScript 是一种功能强大的编程语言,广泛用于 Web 开发、服务器端脚本等。虽然它对初学者来说学习起来很容易,但 JavaScript 也可用于构建需要许多高级编程概念的复杂应用程序和系统。 在这篇文章中,我将解释...
本文档旨在提供DVWA靶场的攻略和实践技巧,帮助用户更好地理解和应对Web应用程序漏洞,其主要分类为 1。DVWA部署暴力破解:介绍如何使用DVWA模拟暴力破解攻击,即通过尝试大量的用户名和密码组合来尝试登录系统,以...
为能和大家能共同探讨"设计模式",我将自己在学习中的心得写下来,只是想帮助更多人更容易理解 GoF 的《设计模式》。由 于原著都是以C++为例, 以Java为例的设计模式基本又都以图形应用为例,而我们更关心Java在中间件等...
回忆一下微服务架构是如何一步一步进化产生的,最早是应用是单块架构,后来为了具备一定的扩展和可靠性,就有了垂直架构,也就是加了个负载均衡,接下来是前几年比较火的SOA,主要讲了应用系统之间如何集成和互通,...
提供更好的扩展接口Web Service(SOAP/XML)到其 它相关系统等。 同时通过标准和可重用的J2EE技术(如:JSP, Servlet,EJB组件等),可以快速和安全的部署实施 网络教学远程培训的基础设施。 2 实现网络教学平台的几种J2EE...
3、面向各类用户XXXX提供信息发布、意见反馈的处理平台,加强与社会的沟通,更好地 提供信息服务; 4、内部建立信息内容的编辑、审核、发布的严格审批流程,确保发布信息的严肃性、严 谨性; 5、按照XX公司外部信息...
如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息[原创] 如何解决ACCESS中SELECT TOP语句竟然...
在WEB 服务器上,利用ASP.NET技术等技术,实现了一个很简单的网上在线论坛系统,并详细讨论 了该系统的结构及其实现过程。具有显示版面、查看版面、查看贴子、查看发表的贴子 、查看跟帖内容、用户注册、用户登入、发表...
最后,附录E给出了启动和运转Microsoft IIS Web服务器、PHP和Eclipse PHP开发工具(PDT)的详细指导,这些将有助于我们更好地学习第7章。 在快速变化的环境下保持最新 为使数据库的概念在各版中保持最新,我们将根据...
办公自动化网络安全防护策略探讨全文共4页,当前为第1页。办公自动化网络安全防护策略探讨全文共4页,当前为第1页。 办公自动化网络安全防护策略探讨 办公自动化网络安全防护策略探讨全文共4页,当前为第1页。 办公...
随着测试越来越复杂,我们把用junit创建更好的测试方案来展现。 第2章:进一步深入研究了Junit的类,生命周期和框架。为了把这些联系起来,我们描述了一些 测试的方法和例子。 第3章:描述了一个复杂的TestCase...
好消息是您可能已经非常熟悉其中的大部分技术,更好的是这些技术都很 容易学习,并不像完整的编程语言(如 Java 或 Ruby)那样 困难。 下面是 Ajax 应用程序所用到的基本技术: HTML 用于建立 Web 表单并确定...
对于计算机专业的学生来说,这是一个很好的学习和实践平台,可以帮助他们更好地掌握ASP和ACCESS数据库技术,提高解决实际问题的能力。同时,该项目也可以作为其他类似应用场景的参考案例,具有一定的推广价值。
开发人员,测试人员,技术架构师,公司领导,文档人员等项目团队成员之间的有效的沟通在项目时间较长,项目较大的项目中,总是存在较多瓶颈,产生一些无法预料的风险,利用VSTS Team Foundation Server可以更好地使...
开发人员,测试人员,技术架构师,公司领导,文档人员等项目团队成员之间的有效的沟通在项目时间较长,项目较大的项目中,总是存在较多瓶颈,产生一些无法预料的风险,利用VSTS Team Foundation Server可以更好地使...
“尽管以C++为基础,但Java是一种更纯粹的面向对象程序设计语言”。 无论C++还是Java都属于杂合语言。但在Java中,设计者觉得这种杂合并不象在C++里那么重要。杂合语言允许采用多种编程风格;之所以说C++是一种杂合...
另一方面,设计表单验证是为了让Web应 用更快地抛出错误。换句话说,最好利用浏览器内置的处理机制来告知用户网页内包含无效的表单控件值。过去,数据在网络上转一圈,仅仅是为了让服务器通知用 户他输入了错误的...
第2章介绍Linux的安装过程,但是又有一些独到的内容:我们没有机械地重复软件本身提供的安装事项,而是帮助你把Linux系统专门配置成为一台作为服务器使用的计算机。第3章继续介绍安装过程,讲述如何设置两种Linux...
有没有过这样的感觉,一本书的上册没有学好,觉着下册心里也没底儿,甚至非要把上册复习一遍才敢继续学习。如果你也是这样,要去看看心理医生啦,没准儿会有洁癖的毛病。 任何事情都要追求完美才敢继续往后进行,是...