Каков пример хорошо спроектированного сетевого сервера?
-
13-09-2019 - |
Вопрос
Мне интересно посмотреть на архитектуры для расширяемых сетевых приложений, обслуживающих сеть.Меня не слишком интересует протокол или используемый язык, меня больше интересует элегантность и расширяемость дизайна.Конечно, на ум приходит Apache, но мне было интересно, есть ли у кого-нибудь другие примеры, с которыми им было бы приятно работать.
Редактировать:просто чтобы уточнить, я спрашиваю о серверном приложении, которое реализует сетевой протокол.Фреймворки веб-разработки не являются сетевыми серверами в этом смысле.Протоколы могут включать, но не ограничиваются ими:FTP, HTTP, XMPP, SNMP, IMAP и т.д.Хорошие сетевые серверы реализуют своего рода параллелизм, фокусируются на масштабируемости, но при этом обладают хорошей расширяемостью.
Решение
nginx (см. также nginx вики) — это HTTP-сервер и почтовый прокси, заслуживший репутацию благодаря масштабируемости и эффективности использования ресурсов.Он использует архитектуру, основанную на событиях (поддерживает epoll, kqueue и т. д.), чтобы поддерживать низкое использование памяти даже при значительных нагрузках.
Другие советы
Подумал, что выкину Апач здесь, чтобы все не ответили на него одновременно.
ДжангоВеб-фреймворк 's - хороший сервер.В этом отношении все серверы веб-приложений очень расширяемы.
Я бы сказал, что ASP.NET — это хорошо спроектированное серверное приложение.Модель программирования является расширяемой (позволяет подключаться к каждому событию жизненного цикла запроса с помощью модулей, созданных пользователем).
Также чрезвычайно масштабируемый и производительный.
Одна только функциональность кэширования чего стоит.Я могу дать вам общую ссылку на ASP.NET, но я уверен, что вы с ней достаточно знакомы.
Для написания сетевых серверов, с которыми мне нравится работать ПОЕ.
Эджабберд — это XMPP-сервер, написанный на Erlang.Собственная передача сообщений языка программирования Erlang прекрасно сочетается с сервером обмена мгновенными сообщениями, что позволяет Ejabberd быть очень модульным, а также демонстрировать высокий уровень параллелизма.
Тот самый Мини -АТС Asterisk это телефонный сервер с открытым исходным кодом, который реализует ряд протоколов VoIP, включая SIP.Он довольно модульный и невероятно настраиваемый, даже использует своего рода собственный язык программирования AEL для описания взаимодействия с диалпланом IVR.
Пристань мне помогло.Он быстрый и хорошо работает под нагрузкой.Конечно, производительность будет зависеть от того, какое приложение вы развернете поверх Jetty.
Я бы порекомендовал прочитать эти книги по ACE:
- Сетевое программирование на C++:Освоение сложности с использованием ACE и шаблонов
- Сетевое программирование на C++:Систематическое повторное использование с ACE и фреймворками
Они содержат много очень полезной информации о разработке сетевых приложений.
я бы взглянул на ОпенСШ, он хорошо известен своей практически непроницаемостью.В основном это связано с интенсивным процессом проверки группой OpenBSD, но я подозреваю, что это также связано с архитектурой.
Для расширяемости я бы посмотрел немного глубже OpenSSL (основной набор инструментов протокола, используемый для OpenSSH).
Поскольку никто больше об этом не упомянул:ИИС.
Это очень расширяемое приложение для Windows (которое само по себе чрезвычайно расширяемо).
Добавьте ASP и другие компоненты .NET, и вы не сможете получить ничего более универсального.