首页 > 其他 > 详细

CGI与Servlet

时间:2020-05-17 14:11:23      阅读:60      评论:0      收藏:0      [点我收藏+]

CGI 与 FastCGI

公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。

因为原始CGI每处理一次请求,就需要创建一个新的CGI进程,效率低下,几乎已经没有人使用。取而代之的是FastCGI,每次请求都与同一个守护进程交互。

快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。FastCGI致力于减少网页服务器与CGI程序之间交互的开销,从而使服务器可以同时处理更多的网页请求。

典型CGI(FastCGI)处理过程

  1. 客户端请求通过网络到达Web服务器
  2. Web服务器接受请求并调用CGI程序处理
  3. CGI程序将处理结果返回给Web服务器
  4. Web服务器将结果回传给客户端

Servlet

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

典型Servlet处理过程

  1. 客户端请求通过网络到达Web服务器
  2. Web服务器接受请求并转发给Servlet容器
  3. Servlet容器接收到请求后向Servlet实例传递HttpServletRequest对象和HttpServletResponse对象,Servlet实例处理完毕后返回给Web服务器
  4. Web服务器将结果回传给客户端

每个Servlet类都需要实现int,service,destroy三个方法。Servlet容器只会加载一次Servlet实例并调用init方法,对于后续请求调用service方法进行处理,当Servlet实例销毁时调用一次destroy方法。

比较

  1. 传统的CGI程序每次请求都需要启动新的进程,资源开销较大,而servlet中每个请求由一个轻量级Java线程处理,相对效率较高。但使用FastCGI后性能一般优于Servlet(未找到具体数据,仅根据nginx模块推算)。
  2. FastCGI多使用C,C++等实现,业务代码可移植性取决于具体实现语言。Servlet由Java实现,天生具有跨平台特征。

结论

随着技术的不断发展,FastCGI 和新的高性能框架 swoole,Vert.x 等技术的发展,在技术选型时更多考虑的是团队的技术栈以及开发成本,两者之间的区别不再是主要的考虑因素。

参考资料

CGI与Servlet

原文:https://www.cnblogs.com/gkenan/p/12904893.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!