我必须编写一个非常轻量级的服务器,它可以在 C 语言的嵌入式系统处理器上运行。
我计划只支持 GET 请求。大多数内容将是静态的,但它们将由 C CGI 文件生成(是的,我知道,这很痛苦。但我们只有 C 可供使用)。
我能否支持 AJAX GET 请求?我不知道是否需要特殊的服务器端代码来处理它们。我觉得 AJAX 都是客户端。
您应该问自己的问题是,为什么您需要编写自定义 HTTP 服务器。研究现有的解决方案,看看它们是否满足您的需求。假设您有某种 POSIX 层可以在其上编程,那么您可以将几个轻量级 HTTP 服务器移植到您的嵌入式系统:
GNU libmicrohttpd 是一个小型 C 库,它应该可以轻松地将 HTTP 服务器作为另一个应用程序的一部分运行。GNU GNU Libmicrohttpd 是免费软件,是 GNU 项目的一部分。
轻量级:
安全性、速度、合规性和灵活性——所有这些都描述了 lighttpd (pron. lighty),它正在迅速重新定义网络服务器的效率;因为它专为高性能环境而设计和优化。...它是在修订后的 BSD 许可下获得许可的开源软件。
nginx [engine x] 是一个 HTTP 和反向代理服务器,也是一个邮件代理服务器,由 Igor Sysoev 编写。... 以下是一些成功案例:Netflix、Wordpress.com、FastMail.FM。... 源代码和文档是根据 2 条款 BSD-like 许可证分发的。
thttpd 是一个简单、小型、快速且安全的 HTTP 服务器。它没有很多特殊功能,但足以满足大多数 Web 用途,它的速度与最好的全功能服务器(Apache、NCSA Netscape)差不多,而且它有一个非常有用的功能(URL-traffic -based throttling) 其他服务器目前没有。
如果可能的话,让您放弃自己实现的原因是因为 AJAX 在很大程度上依赖于 HTTP/1.1 特性来提供高质量的用户体验,而从头开始实现所有 HTTP/1.1 是一项相当艰巨的任务,可能需要花费在服务器稳定且性能足以成为令人满意的产品之前进行了许多开发迭代。
AJAX 的有趣部分完全发生在客户端。对于那些不知道的人,AJAX 代表“异步 Javascript 和 XML”,这意味着从客户端的角度来看,请求将通过 javascript 异步发出。XML 部分具有误导性,因为这些是正常的 HTTP 请求,并且响应可以包含任何内容。
就您的服务器而言,您将像处理任何其他请求一样处理这些请求。没有特殊的代码,没有特殊的小服务程序等。从服务器的角度来看,没有什么会发出“AJAX”请求,所以像对待任何其他人一样对待它。
另外,我希望这个项目进展顺利,祝你好运。太多人回避这些有趣的挑战,因为它们很困难,或者看起来很容易。
AJAX 很好,它只是 GET(或偶尔 POST)请求,它们在服务器端的格式完全相同。
服务器上的不同之处在于,它们通常会转到不同的“servlet”(或 C 代码中的方法)进行回答。
通常,答案可能是 XML、JSON(Javascript 的序列化数据)或 HTML 片段(没有或标记,只是 a 或某物的内容。)。或者它可能只是表示“成功”的 200 OO 响应。
在浏览器端,AJAX 是从页面内的 Javascript 请求和使用的;然后将结果通过innerHtml
(对于 HTML 片段)粘贴到 DOM 中,或者通过 Javascript(对于 JSON)内置到 DOM 中。第二个选项性能较差。
您的第一个典型用例很可能是搜索框的自动完成,或类似的东西。
HTTP 服务器的最大问题是,它们应该是可靠的。C 不是一种很好的语言来提供 24-7 可靠的软件。
对我来说,Java 是一个巨大的飞跃,因为您可以安全地执行字符串并记录您该死的程序正在做什么——我认为这是质量工程和可调试性的最低要求。祝你好运!