代码之家  ›  专栏  ›  技术社区  ›  Howard May

需要实时可嵌入的http服务器库

  •  5
  • Howard May  · 技术社区  · 15 年前

    在查看了几个可用的http服务器库之后,我还没有找到我要查找的内容,我确信我不能第一个拥有这组需求。

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

    因此,web服务器库将需要支持以下流

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

    2) HTTP客户端传输HTTP请求2。。。

    3) Web服务器库接收请求1并将其传递给我的Web服务器应用程序

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

    5) Web服务器接收请求2并将其传递给我的Web服务器应用程序

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

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

    8) Web服务器将HTTP响应1传输到HTTP客户端

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

    10) Web服务器将HTTP响应2传输到HTTP客户端

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

    附加要求如下

    1. 嵌入到现有的“C”应用程序中
    2. 占用空间小;我不需要Apache等中提供的所有功能。
    3. 高效;每秒需要支持数千个请求
    4. 允许对请求进行异步响应;它们对响应的延迟很小,并且考虑到所需的请求吞吐量,同步体系结构对我不起作用。
    5. 支持持久TCP连接
    6. 支持与服务器推送Comet连接一起使用
    7. 开源/GPL
    8. 支持HTTPS
    9. 可跨linux、windows移植;最好更多。

    我将非常感谢你的推荐

    致意

    8 回复  |  直到 15 年前
        1
  •  4
  •   Andrew Aylett    15 年前

    你可以试试 libmicrohttp .

        2
  •  4
  •   puchu    12 年前

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

        3
  •  4
  •   user3474832    11 年前

    为了以后的参考,那就满足你的要求,看看 libasyncd 我是投稿人之一。

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

    是用C写的。

    占用空间小;我不需要Apache等中提供的所有功能。

    非常紧凑。

    高效;每秒需要支持数千个请求

    它是基于libevent的框架。能处理的不止这些。

    允许异步响应请求;

    这是异步的。也支持管道。

    支持持久TCP连接

    当然,保持活力。

    支持与服务器推送Comet连接一起使用

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

    开源/GPL

    根据BSD许可证

    支持HTTPS

    对。它支持带有openssl的https。

    可跨linux、windows移植;最好更多。

    可移植,但现在不是windows,而是可移植到windows。

        4
  •  1
  •   Prof. Falken    15 年前

    你想要的是支持 HTTP pipelining . 如果你还没有熟悉那一页,你应该熟悉它。

    是的,去吧 libmicrohttp . 它支持SSL等,可以在Unix和Windows下工作。

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

    另一方面,如果每个响应都有一个启动时间,您可以通过 使用管道,但为每个对象创建一个新请求。然后每个请求都有自己的线程,并行地吸收启动成本。在最佳情况下,所有回复将“立即”发送。 libmicrohttp 在其中支持此操作模式 MHD_USE_THREAD_PER_CONNECTION 线程模型。

        5
  •  0
  •   Christopher Orr    15 年前

    跟进以前的评论和更新。。。

    你不会说有多少个并发连接,而只是“一个TCP链接”。
    如果是一个连接,那么您将使用前面提到的HTTP管道;因此您只需要少量线程(而不是数千个线程)来处理管道前端的请求。

    所以您不需要为每个请求都有一个线程;只需要为每个连接提供一个小的工作线程池。

    到目前为止,您是否做过任何测试或实现,以显示您是否确实在流水线连接的响应延迟方面存在问题?
    如果你的嵌入式设备足够强大,可以处理每秒数千个请求,包括设置TLS、加密和解密,我会担心在这个级别过早优化。

        6
  •  0
  •   Byron Whitlock    15 年前

    霍华德,

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

        7
  •  0
  •   Hassan Syed    15 年前

    不敢相信没人提起 nginx . 我已经阅读了大部分的源代码,它是非常模块化的。你可能很快就能得到你需要的零件。

        8
  •  0
  •   Jeff Lamb    15 年前

    uIP或lwip可以为你工作。我个人使用uIP。这对少数客户机和并发连接(或者您称之为“流水线”)很有好处。然而,它的可伸缩性和提供内容的速度不如我所读的lwip。我使用的是简单和小尺寸的uIP,而不是lwip的强大功能,因为我的应用程序通常只有一个用户。

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

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

    实际上,我已经在几个方面修改了uIP。添加一个DHCP服务器和支持文件上传的多部分POST是最重要的事情。)如果您有任何问题,请告诉我。

    推荐文章