代码之家  ›  专栏  ›  技术社区  ›  Kariem

如何包装C库以便可以从Web服务调用它

  •  6
  • Kariem  · 技术社区  · 15 年前

    我们有一个在C语言中实现了非常复杂逻辑的库。它有一个命令行接口,带有不太复杂的基于字符串的参数。为了访问这个库,我们希望包装这个库,这样就可以使用简单的XML RPC甚至直接的HTTP POST调用来访问它。

    有了Java的一些经验,我的第一个想法就是

    • 把图书馆包起来 JNI / JNA
    • 使用瘦的WS堆栈和servlet引擎
    • 通过Apache向servlet引擎发送代理请求

    我相信应该已经有一些简单的东西可以使用,所以我在这里发布这个问题。解决方案有以下要求

    • 它应该可以部署到当前的Linux发行版,最好是已经通过包管理提供的版本。
    • 它应该与标准Web服务器集成(在我的示例Apache中)。
    • 对库接口的小改动应该是可管理的
    • 端到端(HTTP WS-Library WS-HTTP)解决方案不应产生太多开销,但可靠性非常重要

    作为JNI/JNA方案的替代方案,我认为在C世界中,编写Web服务并调用它应该不会太困难。 非托管代码 模块,但我希望有人能给我一些关于需求可行的指针。

    6 回复  |  直到 15 年前
        1
  •  1
  •   jfarrell    15 年前

    创建Apache模块非常简单,因为您熟悉xmlrpc,所以应该检查mod-xmlrpc2。您可以轻松地将C代码添加到此Apache模块中,并在几分钟内运行xmlrpc服务器。

        2
  •  2
  •   wds    15 年前

    如果您要使用Web服务,也许 Soaplab 会有用的。它基本上是一个在SOAP Web服务中包装现有命令行应用程序的工具。它生成的Web服务看起来有点奇怪,但它是一种非常流行的方法,可以使类似的东西工作。

        3
  •  1
  •   Kangkan    15 年前

    我认为您也可以将其发布为基于SOAP的Web服务。GSOAP可用于提供库外的服务接口。你探索过GSOAP吗?见 http://www.cs.fsu.edu/~engelen/soap.html

    当做, 康坎

        4
  •  0
  •   Steve Jessop    15 年前

    取决于您所熟悉的技术、您已经安装并在服务器上工作的技术以及您的负载需求。

    原始CGI怎么样?假设C代码在请求之间是无状态的,您可以这样做而不需要修改库。编写一个简单的脚本,将请求参数从CGI环境中提取出来,可能会对输入进行消毒,通过命令行接口调用库,并将结果打包成您想要的任何HTTP响应。然后配置Apache将相关的URL发送到此脚本。例如,Python对XML-RPC有库支持,Web上使用的其他脚本语言也有库支持。

    servlet听起来像是杀戮过度,但是例如,如果您希望每个CGI进程实例化多个请求,并且不想参与Apache配置,那么坚持您所知道的可能是最容易的。

        5
  •  0
  •   Andy Shellam    15 年前

    我现在正在用C++做类似的事情。在我的例子中,我正在编写一个PHP模块,允许PHP脚本访问C++库中的逻辑。

    然后,我可以使用任何我想让世界其他地方看到的格式——最初,它只是通过一个PHP Web应用程序,但我也将开发一个XML-RPC接口。

        6
  •  0
  •   Jason Stelzer    15 年前

    如果你要沿着JNI路线走,去看看Swig。 http://www.swig.org/Doc1.3/Java.html

    假设您有要进行项目绑定的头,那么Swig非常容易使用。