从目前为止我读到的所有关于mochiweb的文章中,我反复听说mochiweb提供了非常好的可伸缩性。我的问题是,mochiweb究竟是如何获得其可伸缩性属性的?是来自erlang固有的可伸缩性属性,还是mochiweb有任何额外的代码可以显式地使它能够很好地伸缩?换句话说,如果我自己在erlang中编写一个简单的http服务器,使用一个简单的“循环”(递归函数)来处理请求,那么它的可伸缩性是否与使用mochiweb框架构建的简单web服务器相同?
更新:我不打算实现一个支持所有可能功能的成熟的web服务器。我的要求是非常具体的-处理来自固定控件的html表单的post数据。
最佳答案
据我所知,mochiweb本身是不可伸缩的。它是一个快速、微型的服务器库,每秒可以处理数千个请求。这种方式与“可伸缩性”无关(除了调整在任何给定时间监听的mochiweb_acceptor
s的数量)。
mochiweb提供的是一个可靠的web服务器库,以及erlang的可伸缩性特性。如果您想运行一个mochiweb服务器,当请求进入时,您仍然可以将处理该请求的工作卸载到任何您想要的机器上,这要归功于erlang的分布式节点基础结构和廉价的消息传递。如果您想运行多个mochiweb服务器,可以将它们放在负载平衡器后面,并使用mnesia的分布式功能在计算机之间同步会话数据。
关键是,mochiweb很小很快(足够)。erlang是可伸缩性的强大工具。
如果你推出自己的服务器解决方案,你可能会满足或击败mochiweb的效率和“可扩展性”开箱即用。但之后你必须重新考虑他们已经想到的一切,你必须亲自进行测试。
关于http - Mochiweb的可伸缩性功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2903355/