需要实时嵌入式http服务器库

时间:2010-02-09 17:29:08

标签: c http embeddedwebserver simplehttpserver

看了几个可用的http服务器库,我还没找到我要找的东西,并且我确信我不能成为第一个有这套要求的人。

我需要一个提供“流水线”API的库。流水线操作用于描述HTTP功能,其中可以一次通过TCP链路发送多个HTTP请求,而无需等待响应。我想在库API上使用类似的功能,我的应用程序可以接收所有这些请求而无需发送响应(我会响应,但希望能够一次处理多个请求以减少内部延迟的影响)。

因此,Web服务器库需要支持以下流程

1)HTTP客户端发送http请求1

2)HTTP客户端发送http请求2 ...

3)Web服务器库接收请求1并将其传递给My Web Server App

4)我的Web服务器应用程序收到请求1并将其发送到我的系统

5)Web Server收到请求2并将其传递给My Web Server App

6)我的Web服务器应用程序接收请求2并将其发送到我的系统

7)我的Web服务器应用程序从My System接收对请求1的响应并将其传递给Web服务器

8)Web Server将HTTP响应1发送到HTTP客户端

9)我的Web服务器应用程序从我的系统接收对请求2的响应 将它传递给Web服务器

10)Web Server将HTTP响应2发送到HTTP客户端

希望这说明了我的要求。有 认识的两个关键点。对Web服务器库的响应是 异步,可能有几个HTTP请求传递给My Web 响应未完成的服务器App。

其他要求是

  1. 可嵌入现有的“C”应用程序
  2. 占地面积小;我不需要Apache等中提供的所有功能。
  3. 高效;将需要支持数以千计的请求
  4. 允许对请求进行异步响应;它们对响应的延迟很小,并且根据所需的请求吞吐量,同步架构对我来说不起作用。
  5. 支持持久性TCP连接
  6. 支持使用Server-Push Comet连接
  7. 开源/ GPL
  8. 支持HTTPS
  9. 可移植到linux,windows;最好是更多。
  10. 我将非常感谢任何建议

    最好的问候

8 个答案:

答案 0 :(得分:4)

您可以尝试libmicrohttp

答案 1 :(得分:4)

使用Onion,卢克。这是C中的轻量级且易于使用的HTTP服务器库。

答案 2 :(得分:4)

为了将来参考,符合您的要求,请查看libasyncd 我是贡献者之一。

  

可嵌入现有的“C”应用程序

用C写的。

  

占地面积小;我不需要Apache等中提供的所有功能。

非常紧凑。

  

高效;将需要支持数以千计的请求

这是基于自由的框架。可以处理更多。

  

允许对请求进行异步响应;

这是异步的。还支持流水线操作。

  

支持持久性TCP连接

当然,保持活力。

  

支持使用Server-Push Comet连接

这取决于你如何编写逻辑代码。

  

开源/ GPL

在BSD许可下

  

支持HTTPS

是。它支持使用openssl的https。

  

可移植到linux,windows;最好是更多。

便携式但不是Windows,但它可以移植到Windows。

答案 3 :(得分:1)

您想要的是支持HTTP pipelining的内容。如果你还没有,你应该熟悉那个页面。

是的,请转到libmicrohttp。它支持SSL等,适用于Unix和Windows。

然而,克里斯托弗在他的评论中是正确的。如果您有每个响应的启动时间,那么您不会通过流水线获得太多收益。但是,如果您对第一个请求的响应时间很长,那么您可能会赢得一些东西。

另一方面,如果每个响应都有一个启动时间,您可能会通过而不是使用流水线操作获得很多,但会为每个对象创建一个新请求。然后每个请求都有自己的线程,并行地提高启动成本。然后,在最佳情况下,“立即”发送所有响应。 libmicrohttp在其MHD_USE_THREAD_PER_CONNECTION线程模型中支持这种操作模式。

答案 4 :(得分:0)

跟进之前的评论和更新......

您没有说您将拥有多少并发连接,而​​只是“TCP链接” 如果它是单个连接,那么您将使用前面提到的HTTP流水线;所以你只需要一些线程 - 而不是数千个 - 来处理管道头部的请求。

所以你不需要为每个请求都有一个线程;每个连接只需要一小部分工人。

到目前为止,您是否已完成任何测试或实施,以显示您是否确实遇到了流水线连接的响应延迟问题? 如果您的嵌入式设备功能强大,足以应付每秒数千个请求,包括进行TLS设置,加密和解密,我会担心此级别的过早优化。

答案 5 :(得分:0)

霍华德,

你看过lighthttpd了吗?它满足您的所有要求,但它不是明确的嵌入式Web服务器。但它是开源的,并将其编译到您的应用程序中应该不会太难。然后,您可以编写自定义plugin来处理您的请求。

答案 6 :(得分:0)

无法相信没人提到nginx。我已经阅读了很大一部分源代码,它非常模块化。您可能很快就能获得所需的部件。

答案 7 :(得分:0)

uIP或lwip可能适合您。我个人使用uIP。它适用于少量客户端和并发连接(或者您称之为“流水线”)。但是,它不像我读过的那样可扩展或快速提供内容。我使用简单和小尺寸的uIP而不是lwip的强大功能,因为我的应用程序通常只有1个用户。

我发现随着并发连接的增加,uIP非常有限。但是,我确信这是我可用的MAC接收缓冲区的限制,而不是uIP本身。我认为lwip会以某种方式使用更多的内存来解决这个问题。我只是没有足够的以太网RAM来支持大量请求数据包进入。也就是说,我可以在56mhz处理器上进行背景ajax轮询,延迟时间约为15ms。

http://www.sics.se/~adam/software.html

我实际上已经通过多种方式修改了uIP。添加DHCP服务器并支持多部分POST以进行文件上传是很重要的事情。)如果您有任何问题,请告诉我。