设计良好的网络服务器的例子是什么?
我有兴趣研究可扩展网络服务应用程序的架构。 我对协议或使用的语言不太感兴趣,更感兴趣的是设计的优雅和可扩展性。 当然,我想到了 Apache,但我想知道是否有人有任何其他他们觉得可以愉快使用的示例。
编辑:只是为了澄清,我正在询问实现网络协议的服务器应用程序。 从这个意义上讲,Web 开发框架不是网络服务器。 协议可能包括但不限于:FTP、HTTP、XMPP、SNMP、IMAP 等。好的网络服务器实现某种并行性,注重可扩展性,同时还具有良好的可扩展性。
I'm interested in looking at architectures for extensible network serving applications. I'm not too interested in the protocol, or the language used, more in the elegance and extensibility of the design. Of course Apache comes to mind, but I was wondering if anyone had any other examples that they find a pleasure to work with.
EDIT: just to clarify, I'm asking about a server application that implements a network protocol. Web development frameworks are not network servers in this sense. Protocols may include, but are not limited to: FTP, HTTP, XMPP, SNMP, IMAP, etc. Good network servers implement some sort of parallelism, focus on scalability, yet have good extensibility as well.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
nginx (另请参阅 nginx wiki)是一个 HTTP 服务器和邮件代理,在可扩展性和资源效率方面赢得了声誉。 它使用基于事件的架构(支持 epoll、kqueue 等),即使在相当大的负载下也能保持较低的内存使用率。
nginx (see also the nginx wiki) is an HTTP server and mail proxy that has earned a reputation for scalability and resource efficiency. It uses an event-based architecture (supporting epoll, kqueue, etc.) to keep memory usage low even under sizable loads.
我想我会在这里扔掉 Apache 以防止每个人同时回答它。
Figured I'd throw out Apache here to prevent everybody answering with it at the same time.
Django 的 Web 框架是一个很好的服务器。 就此而言,所有 Web 应用程序服务器都具有很强的可扩展性。
Django's web framework is a nice server. For that matter, all web application servers are very extensible.
我想说 ASP.NET 是一个设计良好的服务器应用程序。 编程模型是可扩展的(允许您使用用户编写的模块挂钩请求生命周期的每个事件)。
还具有极高的可扩展性和高性能。
仅缓存功能就值得了。 我可以为您提供 ASP.NET 的通用链接,但我确信您对它相当熟悉。
http://www.asp.net/
I would say ASP.NET is a well designed server application. Programming model is extensible (allows you to hook into every event of the request lifecycle with user-authored modules).
Also extremely scalabale and performant.
The caching functionality alone is worth it. I can give you a generic link to ASP.NET but I'm sure you are reasonably familiar with it.
http://www.asp.net/
为了编写网络服务器,我喜欢使用 POE。
For writing network servers I like to work with POE.
Ejabberd 是一个用 Erlang 编写的 XMPP 服务器。 Erlang 编程语言的本机消息传递非常适合即时消息服务器,这使得 Ejabberd 非常模块化,并且表现出大量的并行性。
Ejabberd is an XMPP server written in Erlang. The Erlang programming language's native message passing fits nicely with an instant-messaging server, which allows Ejabberd to be very modular, as well as exhibiting a lot of parallelism.
Asterisk PBX 是一个开源电话服务器,它实现了包括 SIP 在内的多种 VoIP 协议。 它具有相当的模块化和令人难以置信的可配置性,甚至使用它自己的编程语言 AEL 来描述 IVR 拨号方案交互。
The Asterisk PBX is an open-source telephony server that implements a number of VoIP protocols including SIP. It's fairly modular, and incredibly configurable, even using it's own programming language of sorts, AEL, to describe IVR dialplan interactions.
Jetty 对我来说效果很好。 它速度快并且在负载下工作良好。 当然,性能取决于您在 Jetty 上部署的应用程序类型。
Jetty has worked well for me. It is fast and works well under load. Of course, performance will depend what kind of application you deploy on top of Jetty.
我建议阅读以下有关 ACE 的书籍:
它们包含许多有关设计网络应用程序的非常有用的信息。
I would recommend to read these books on ACE:
They contain a lot of very useful information about designing networked applications.
我会看一下 OpenSSH,众所周知,它实际上是难以理解的。 这主要是由于 OpenBSD 小组的深入审查过程,但我怀疑这也与架构有关。
对于可扩展性,我会更深入地了解 OpenSSL (用于 OpenSSH 的底层协议工具包)。
I'd take a look at OpenSSH, it's well known for being practically impenetrable. This is mainly due to the OpenBSD group's intensive review process but I suspect it's also related to the architecture.
For extensibility I would look a bit deeper to OpenSSL (the underlying protocol toolkit used for OpenSSH).
因为没有人提到它:IIS。
它是一个非常可扩展的 Windows 应用程序(它本身具有极强的可扩展性)。
如果使用 ASP 和其他 .NET 组件,您将无法真正获得比这更通用的功能。
Since no one else has mentioned it: IIS.
It is a very extensible application for Windows (which is extremely extensible itself).
Tack on ASP and other .NET components and you can't really get any more versatile than that.