Назад | Перейти на главную страницу

Советы по технологии для одной программы, много одновременных http-клиентов на маленьком хосте?

Какую технологию можно использовать для обслуживания нескольких одновременных пользователей в одном приложении на небольшом узле с ограниченными ресурсами (например, Rasbperry Pi или аналогичном)?

То есть ему не нужен веб-сервер общего назначения, такой как Apache, так как он должен поддерживать только одно приложение и несколько активных веб-страниц, но много соединений.

Я понимаю Apache / PHP / MySQL на более крупных серверах, но для них, похоже, требуется слишком много ресурсов для поддержки множества одновременных (скажем, порядка 100) соединений на небольшом хосте, при этом каждое соединение избыточно загружается в свою собственную копию того же интерпретированного код.

Я думаю, например, пропустить веб-сервер общего назначения и иметь одну скомпилированную в памяти программу на C ++, которая обслуживает множество одновременных HTTP-соединений - легкие и быстрые. Приложение будет довольно простым. Или, возможно, надстройка или модуль для легкого веб-сервера. Или, может быть, что-то вроде node.js, если это было очень ресурсоэффективным и легко масштабируемым даже на небольшом хосте. Я даже не знаю терминологию или ключевые слова для стиля программирования, который я ищу, отсюда и мой вопрос.

Я попробовал StackOverflow, который предлагал обмен Raspberry Pi, где этот обмен был предложен. Какие-нибудь подсказки или подсказки?

не нужен веб-сервер общего назначения, такой как Apache

Ищите легкий веб-сервер как Матопд, thttpd, Lighttpd.

одна резидентная скомпилированная программа на C ++, которая обслуживает множество одновременных HTTP-соединений - легкая и быстрая

"быстрый, легкий HTTP-сервер без разветвления для UNX systems »* в LoC менее 4K C - Mathopd.

много одновременных (скажем, порядка 100) подключений

По-видимому

Я думаю, что ваш основной выбор - это узел и голанг. На первый взгляд, Го выигрывал по производительности, https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=nodeоднако, в зависимости от сложности программы, которую вы пытаетесь написать, и необходимой надежности узел может быть достаточно эффективным, и, безусловно, проще написать простую программу.

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

Если ваш сайт статичен, использование CDN позволит вам без проблем обслуживать сотни тысяч клиентов на Raspberry Pi. CDN получит страницы и кэширует их для вас. Только когда вы измените страницы, CDN придется снова их получить.

Если только часть сайта является динамической, вы можете использовать гибридный подход. Сделайте сайт максимально статичным и используйте Ajax только для извлечения измененных данных. Получение только небольшого json с пользовательскими данными требует меньше ресурсов, чем получение всей HTML-страницы. Сценарий на стороне клиента будет извлекать динамические данные и отображать HTML-код в браузере. Разместите статическую часть в CDN.

Как отмечали другие, вам не нужен Apache для небольшого сайта на небольшом устройстве. Помимо Mathopd, thttp и lighthttpd, вы можете попробовать Nginx, Hiawata, Сервер Обезьяны, kHTTP сервер, libmicrohttpd.

Flask - это легкий фреймворк Python для веб-разработки. Это может сработать, в зависимости от того, что вы подразумеваете под словом «многие».