什么技术可以让一个应用程序在资源受限的小型主机上为许多同时用户提供服务(例如:Rasbperry Pi 或类似产品)?
也就是说,它不需要像 Apache 这样的通用 Web 服务器,因为它只需要支持一个应用程序和几个活动网页,但需要许多连接。
我了解大型服务器上的 Apache/PHP/MySQL,但它们似乎需要太多资源来支持小型主机上的许多同时(比如说 100 个)连接 - 每个连接都冗余地加载相同解释代码的副本。
例如,我正在考虑跳过通用 Web 服务器,使用一个内存驻留的编译 C++ 程序来为许多并发 HTTP 连接提供服务 - 轻量级且快速。该应用程序将相当简单。或者可能是轻量级 Web 服务器的附加组件或模块。或者可能是像 node.js 这样的东西,如果它非常节省资源并且即使在小型主机上也易于扩展。我甚至不知道我正在寻找的编程风格的术语或关键字,因此我提出了这个问题。
我尝试了 StackOverflow,它建议使用 Raspberry Pi 交换,并建议进行此交换。有什么提示或线索吗?
答案1
答案2
我认为你的主要选择是 node 和 golang。从表面上看,Go 会根据性能获胜,https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=node但是,根据您尝试编写的程序的复杂性和您需要的可靠性,节点可能足够高效,而且编写一个简单的程序肯定更容易。
我会研究这两个选项,编写一个简单的程序并测试,看看哪个最适合您的用例。
答案3
如果您的网站完全是静态的,使用 CDN 将允许您在 Raspberry Pi 上为数十万个客户端提供服务而不会出现问题。CDN 将获取页面并为您缓存它们。只有当您更改页面时,CDN 才需要再次获取它们。
如果网站只有一部分是动态的,您可以采用混合方法。使网站尽可能静态,并使用 Ajax 仅检索更改的数据。仅检索包含用户数据的小型 json 比检索整个 HTML 页面使用的资源更少。客户端脚本将获取动态数据,并在浏览器上呈现 HTML。让静态部分由 CDN 托管。
正如其他人所说,在小型设备上运行小型网站不需要 Apache。除了 Mathopd、thttp 和 lighthttpd,您还可以尝试Nginx,希瓦塔,Monkey 服务器,HTTP 服务器,libmicrohttpd。
答案4
Flask 是一个轻量级的 Python Web 开发框架。这可能有用,具体取决于你所说的“很多”是什么意思。