我有许多用于数值分析和科学计算(例如模拟)的遗留 C 库,我想在我正在构建的 Web 应用程序中使用它们(到目前为止,我只使用 Javascript 来制作用户界面)。在客户端和/或服务器端执行此操作有哪些选择?我听说过将本机客户端与 chrome 一起使用,但我不喜欢客户端必须打开本机客户端标志才能执行此操作。
6 回答
在服务器端:
首先,CGI(通用网关接口)是能够在 Web 应用程序中使用本机 C 库的最基本方法 - 其中您委托可执行文件(例如用 C 编写)来生成服务器端 Web 内容。
但是 CGI 非常原始且效率低下。每个命令都可能导致在Process
服务器上创建一个新命令。因此,这里有其他可行的替代方案:
参考:http ://en.wikipedia.org/wiki/Common_Gateway_Interface#Alternatives
在客户端:
好消息和坏消息:
您可以在 chrome 中使用 PNaCl(便携式本机客户端)。它将默认打开。
但是第一次公开发布预计在 2013 年底。寻找 PNaCl
你不能在客户端做很多事情——你不可能期望客户端拥有这些库,也没有安全的方式来下载和运行它们。
最简单的方法是以任何您想要的方式编写服务器端,并通过 Web 界面访问它们。通常用于服务器端脚本的许多语言都可以访问本机 C 库,或者您甚至可以编写普通的 C 应用程序并将它们作为脚本代理运行。
在“真正异国情调”的类别中,如果您将其嵌入到充分受保护的环境中,则可以在客户端中运行以 C 代码开头的代码。例如,参见关于如何通过嵌入用 java 编写的 mips 模拟器将 sqlite(一个 C 数据库应用程序)变成 100% 纯 java 应用程序的描述。
http://blog.benad.me/2008/1/22/nestedvm-compile-almost-anything-to-java.html
对于在客户端执行此操作,您可以使用Emscripten。但是,这很可能需要对现有代码进行一些重构以适应 JavaScript 的异步主循环要求。
请注意,Emscripten 不是概念证明或类似的东西。它非常强大,并且已经用于将复杂的代码移植到网络上。您可以查看演示(在上面的 URL 中列出),看看可以用它做什么。
听起来您最好将遗留的 C 库方法表示为服务器端的一种(WEB)服务。对于这种方法来说,原始 CGI 应用程序似乎是一个相当低级的点,但通常是正确的。有 C/C++ 框架可用于创建 Web 服务服务器,以及支持 Web 服务访问和数据表示的客户端库。例如,对于服务器端,您可以使用gSoap。
另一种可能性是使用您选择的网络服务器来传输普通文件并使用连接到您的 C 代码的自定义网络服务器(不需要支持完整的 HTTP 规范)与客户端 Javascript 进行通信。
您可以用作基础的两个最小网络服务器是libuv-webserver和nweb。