Web服务器 Mongrel2
本文导语: Mongrel2是一个基于ZeroMQ的Web服务器,语言独立,可以用17种语言编写应用,还有更多非常奇特的地方:What makes Mongrel2 special is how it satisfies these requests in a language agnostic andasynchronous way using a simple messaging protocol to talk to applications; ...
Mongrel2是一个基于ZeroMQ的Web服务器,语言独立,可以用17种语言编写应用,还有更多非常奇特的地方:
What makes Mongrel2 special is how it satisfies these requests in a language agnostic andasynchronous way using a simple messaging protocol to talk to applications; not just serve files. Mongrel2 is also designed to be incredibly easy to automatically manage it as part of your infrastructure.
Other web servers do some of these things, but they either do them in a bastardized way or not all of them at once. Plenty of language specific web servers like Node.js and Jetty have asynchronous operation, but they’re not language agnostic1 . Other web servers will let you talk to any language as a backend, but they insist on using HTTP proxying or FastCGI, which is not friendly to asynchronous operations.
基本架构是:
a、非阻塞IO
b、通过libtask实现event IO和每Connection一个coroutine
c、和Mongrel一样用Ragel实现HTTP协议解析
d、将Request编码为JSON或TNetString发送到ZeroMQ
e、ZeroMQ的客户端作为Handler接收Request进行处理
f、Handler将响应写回ZeroMQ
g、Mongrel2将Response写回给Http Connection
h、这整个过程又是通过Ragel管理状态机来实现的