Какой пример хорошо спроектированного сетевого сервера? - PullRequest
1 голос
/ 24 апреля 2009

Мне интересно посмотреть на архитектуры для расширяемых приложений, обслуживающих сеть. Я не слишком заинтересован в протоколе или используемом языке, больше в элегантности и расширяемости дизайна. Конечно, на ум приходит Apache, но мне было интересно, есть ли у кого-нибудь еще примеры, с которыми им приятно работать.

РЕДАКТИРОВАТЬ: просто чтобы уточнить, я спрашиваю о серверном приложении, которое реализует сетевой протокол. Фреймворки веб-разработки в этом смысле не являются сетевыми серверами. Протоколы могут включать, но не ограничиваются: FTP, HTTP, XMPP, SNMP, IMAP и т. Д. Хорошие сетевые серверы реализуют своего рода параллелизм, фокусируются на масштабируемости, но также имеют хорошую расширяемость.

Ответы [ 11 ]

3 голосов
/ 01 мая 2009

nginx (см. Также nginx wiki ) - это HTTP-сервер и почтовый прокси, который заслужил репутацию за масштабируемость и эффективность использования ресурсов. Он использует архитектуру, основанную на событиях (поддерживающую epoll, kqueue и т. Д.), Чтобы поддерживать низкое потребление памяти даже при значительных нагрузках.

2 голосов
/ 24 апреля 2009

Полагаю, я бы выбросил Apache , чтобы не дать всем ответить одновременно.

0 голосов
/ 01 мая 2009

Так как никто другой не упомянул об этом: IIS.

Это очень расширяемое приложение для Windows (само по себе чрезвычайно расширяемое).

Приспособьтесь к ASP и другим компонентам .NET, и вы не сможете стать более универсальным, чем это.

0 голосов
/ 01 мая 2009

Я бы посмотрел на OpenSSH , он хорошо известен как практически непроницаемый. Это происходит главным образом из-за интенсивного процесса обзора группы OpenBSD, но я подозреваю, что это также связано с архитектурой.

Для расширения я бы посмотрел немного глубже на OpenSSL (базовый инструментарий протокола, используемый для OpenSSH).

0 голосов
/ 01 мая 2009

Я бы порекомендовал прочитать эти книги на ACE:

Они содержат много очень полезной информации о разработке сетевых приложений.

0 голосов
/ 01 мая 2009

Причал хорошо сработал для меня. Это быстро и хорошо работает под нагрузкой. Конечно, производительность будет зависеть от того, какое приложение вы развернете поверх Jetty.

0 голосов
/ 01 мая 2009

Asterisk PBX - это сервер телефонии с открытым исходным кодом, который реализует ряд протоколов VoIP, включая SIP. Он достаточно модульный и невероятно настраиваемый, даже используя собственный язык программирования AEL для описания взаимодействий между диалпланами IVR.

0 голосов
/ 01 мая 2009

Ejabberd - сервер XMPP, написанный на Erlang. Нативная передача сообщений языка программирования Erlang прекрасно сочетается с сервером мгновенных сообщений, что позволяет Ejabberd быть очень модульным, а также демонстрировать большую параллельность.

0 голосов
/ 01 мая 2009

Для написания сетевых серверов мне нравится работать с POE .

0 голосов
/ 01 мая 2009

Я бы сказал, ASP.NET - это хорошо разработанное серверное приложение. Модель программирования является расширяемой (позволяет подключаться к каждому событию жизненного цикла запроса с помощью пользовательских модулей).

Также чрезвычайно масштабируемый и производительный.

Только одна функция кэширования того стоит. Я могу дать вам общую ссылку на ASP.NET, но я уверен, что вы достаточно хорошо с ней знакомы.

http://www.asp.net/

...