嵌入式Web服务器,集成了XML解析器

时间:2012-01-22 20:29:56

标签: xml soap https embedded web

我需要将网络服务器集成到运行 Linux 嵌入式设备中,并且正在评估OSS和商业产品。

系统要求不是特别严格: - 内存运行设置高达10MB, - 可以节省20%+ 300MHz ARM以及更多突发, - UI将使用jQuery和JSON,所以想要提供几百个KB页面在一秒钟内连接了十几个CSS和JS文件。

功能要求: - HTTPS支持, - 10多个并发连接, - 经过良好的DOS攻击测试。

非常感谢一个集成的XML解析器,以实现SOAP实现。

不是PHP的粉丝,但也不确定服务器端的Javascript,也不熟悉Lua。所以寻找模板解决方案的建议,也许是基于Python的堆栈。

已经审核discussions on SOlists on Wikipedia。了解thttpdMongooseCherokeeAppweb

此时,我根据生产质量部署的第一手经验,邀请详细的技术建议和讨论实施选择。

4 个答案:

答案 0 :(得分:2)

当谈到一个简单的python服务器堆栈时,我最常从社区内听到的用于轻量级实现的组合是CherryPy(为线程池WSGI服务器提供)Werkzeug (创建应用程序的基本结构)两者对WSGI的影响略有不同,这大大加快了开发时间。

有一些非常好的笔记概述了基本的python框架比较(虽然不是在嵌入式环境中,但重点是轻量级部署。)at this question, in which Alex "the Machine" Martelli weighed in for these two.

如果你能负担得起python解释器的开销(我假设你把它包含在符合条件的列表中就可以了),werkzeug是一个很好的方法来设置一个由简单端点组成的应用程序。响应可以内联为mimetyped,以帮助输出UI库(Jquery等)。 Werkzeug文档中有很多很好的例子。

我可以在比较WSGI服务器(满足您对高并发连接和DOS生存性的需求)中找到的最好的资源之一可以在Nicholas Piel's blog post on the subject找到,其中CherryPy作为其中一个为速度提供最好的“砰砰砰砰”的资源。 Cherry中的WSGI服务器已经部署就绪,这可以用作为您的Werkzeug应用程序提供环境的服务器进程,因此您不需要使用mod_wsgi来实现像Apache这样重的东西。樱桃很容易平均在2000 r / ps左右,在中等负荷下响应时间不到一秒。

由于我不知道您将部署什么类型的设备,我当然应该提及这两个平台都会定期更新,因此无论出于何种原因分配网络资源来更新设备是不切实际的。

通过将python的minidom模块(v2.6 +)与Werkzeug中的端点路由相结合,您还应该从非常好的开发速度中受益。使用Werkzeug的Map功能构建复杂的url架构很简单,并且在其文档页面上的教程给出了一个很棒的概述。在这两者之间,启动和运行Web服务应该不会太困难。

答案 1 :(得分:1)

您必须先决定使用哪种服务器端技术。对于嵌入式系统,您有严重的资源限制,因此请确保相应地选择轻量级技术!虽然说Node.js是一项很棒的技术(http://nodejs.org/),但您可能需要注意。我也看过它的一些SOAP实现。另一方面,基于javascript的开发可能非常混乱!您可以尝试不同的解决方案,并使用JMeter(http://jmeter.apache.org)等工具开始测试系统的功能行为。

一些建议:在嵌入式系统中设置一个轻量级的http服务器(如Cherokee,lighttpd等),然后设置PHP(PHP也有一些SOAP工具)。稍后使用Python或Ruby解决方案(如嵌入式Mongrel等)更改PHP。使用JMeter了解系统在高负载下的行为。

答案 2 :(得分:1)

我认为您的嵌入式Web服务器的目的是提供 配置,操作和状态的管理界面。

为了披露,我们公司构建和部署管理网站 许多嵌入式系统上的接口,其规格与您的类似 基于我们的产品描述Web。你可以找到更多关于我们的信息 在http://uweb.workware.net.au/进场,你可以阅读一篇论文 我在2010年嵌入式Linux大会上发表了演讲 在http://workware.net.au/papers/embedded-scripting.pdf提供 我们如何平衡尺寸和性能问题的一些细节 通过脚本快速部署。

您有两个广泛的选择。第一种是使用μWeb等框架 梭子鱼服务器(如上所述)或开源框架 如luci(http://luci.subsignal.org/trac)。第二是 使用轻量级的Web服务器,例如您提到的那些 上面然后构建自己的框架(可能基于jQuery 和JSON)。第二种选择需要更长的时间 当您解决XSS,CRSF和DOS攻击时,安全性是一个问题。

无论如何,我强烈建议你远离PHP,Python或者 服务器端的Javascript。对于a来说,这些都太耗费资源了 300MHz ARM平台。

为什么要管理用户界面需要XML和SOAP 是jQuery和JSON?您对SOAP有单独的要求吗? 支持?如果是这样,gSOAP可能是一个合理的选择(它一直是 我上次使用它几年后。)

关于https和10+个并发会话,请注意初始SSL握手 在嵌入式平台上占用大量资源。如果你是 经常建立新请求(因为新会话,或因为 请求不是流水线的),平台会很困难。你可能只有 建立1-2个SSL连接/秒。

答案 3 :(得分:1)

如果你只有10MB,那么很多建议都是不可能的:只需一个小应用程序,node和ruby就会很快超过这个空间。 PHP将从最低约8MB开始,并可快速达到20 + MB。我们已经看到一个拥有50MB PHP管理应用程序的站点。绝对不是嵌入式的好选择,除非你有GB备用。

我使用了Appweb和ESP,它是一个c语言MVC框架,Ejscript是服务器端Javascript。 Ejscript具有XML解析器,可以处理SOAP需求。 Appweb包含一个非常基本的XML解析器。如果你想要高级SOAP处理,你将需要libxml。

Appweb 4具有良好的DOS保护。您可以使用LimitRequestPerClient指令限制来自单个客户端的同时请求数。 LimitParseTimeout还有助于快速关闭不会结束其标头的DOS请求。 Appweb安全沙箱有许多指令供您表征负载 - 这有助于DOS和其他安全威胁。

你的另一个选择是使用纯Javascript并使用内置了Appweb http引擎的Ejscript。