Какую технологию можно использовать для одного приложения, чтобы обслуживать одновременно множество пользователей на небольшом узле с ограниченными ресурсами (например, Rasbperry Pi или аналогичном)?
То есть ему не нужен веб-сервер общего назначения, такой как Apache , поскольку для этого потребуется только одно приложение и несколько активных веб-страниц, но много подключений.
Я понимаю Apache / PHP / MySQL на более крупных серверах, но они, похоже, требуют слишком много ресурсов для поддержки множества одновременных (скажем, порядка 100) соединений на маленьком хосте - при этом каждое соединение избыточно загружается в свою собственную копию тот же интерпретируемый код.
Я думаю, например, пропустить веб-сервер общего назначения и иметь одну скомпилированную в памяти программу на C ++, которая обслуживает множество одновременных HTTP-соединений - легкий и быстрый. Приложение будет довольно простым. Или, возможно, надстройка или модуль для легкого веб-сервера. Или, может быть, что-то вроде node.js, если это было очень ресурсоэффективным и легко масштабируемым даже на небольшом хосте. Я даже не знаю терминологию или ключевые слова для стиля программирования, который я ищу, отсюда и мой вопрос.
Я попробовал StackOverflow, который предлагал обмен Raspberry Pi, где предлагался этот обмен. Есть какие-нибудь подсказки или подсказки?
не нужен веб-сервер общего назначения, такой как Apache
. Ищите легкий веб-сервер, например Mathopd , thttpd , Lighttpd .
одна резидентная скомпилированная программа на C ++, которая обслуживает множество одновременные HTTP-соединения - легкий и быстрый
«быстрый, легкий, не разветвляющий HTTP-сервер для UN X-систем» * в менее 4K LoC C - Mathopd.
много одновременных (порядок из 100, скажем) соединений
Я думаю, что ваш основной выбор - это узел и голанг. На первый взгляд Go выиграет по производительности, https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=node , однако в зависимости от сложности программы. вы пытаетесь написать, и надежность, которая вам нужна, node может быть достаточно эффективной, и определенно проще написать простую программу.
Я бы исследовал оба этих варианта, написал простую программу и протестировал, чтобы выбрать, какой из них лучше всего подходит для вашего варианта использования.
Если ваш сайт статичен, использование CDN позволит вам без проблем обслуживать сотни тысяч клиентов на Raspberry Pi. CDN получит страницы и кеширует их для вас. Только когда вы измените страницы, CDN придется их снова получить.
Если только часть сайта является динамической, вы можете использовать гибридный подход. Сделайте сайт максимально статичным и используйте Ajax только для извлечения измененных данных. Получение только небольшого json-файла с пользовательскими данными требует меньше ресурсов, чем получение всей HTML-страницы. Сценарий на стороне клиента будет извлекать динамические данные и отображать HTML-код в браузере. Разместите статическую часть в CDN.
Как отмечали другие, вам не нужен Apache для небольшого сайта на небольшом устройстве. Помимо Mathopd, thttp и lighthttpd, вы можете попробовать Nginx , Hiawata , Monkey Server , kHTTP Server , libmicrohttpd ].
Flask - это облегченная среда Python для веб-разработки. Это может сработать, в зависимости от того, что вы подразумеваете под словом «многие».