views:

403

answers:

12

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.

+2  A: 

Figured I'd throw out Apache here to prevent everybody answering with it at the same time.

bmdhacks
A: 

Django's web framework is a nice server. For that matter, all web application servers are very extensible.

S.Lott
This isn't really a network server in that it doesn't implement any network protocols.
bmdhacks
It appears to implement HTTP, since it's a web server. Since your saying it doesn't implement HTTP, your question is confusing.
S.Lott
A: 

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/

Adam
asynchronous web pages are another great feauture
Sesh
A: 

For writing network servers I like to work with POE.

Peter Stuifzand
POE is a very interesting tool to build network servers, but it's not in itself a network server.
bmdhacks
A: 

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.

bmdhacks
A: 

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.

bmdhacks
A: 

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.

Mr. Shiny and New
+3  A: 

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.

Greg Campbell
This is awesome, this sort of thing is exactly what I was looking for.
bmdhacks
A: 

I would recommend to read these books on ACE:

They contain a lot of very useful information about designing networked applications.

lothar
A: 

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).

Rick Minerich
A: 

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.

T Pops
A: 

Check out Twisted. It's all about writing extensible network servers.

Jeff Youel