我有许多用于数值分析和科学计算(如模拟)的遗留C库,我想在正在构建的Web应用程序中使用它们(到目前为止,我只使用JavaScript来制作用户界面)。在客户端和/或服务器端执行此操作的选项是什么?我听说可以在Chrome上使用本地客户端,但我不喜欢客户端必须开启本地客户端标志来完成此操作。
我有许多用于数值分析和科学计算(如模拟)的遗留C库,我想在正在构建的Web应用程序中使用它们(到目前为止,我只使用JavaScript来制作用户界面)。在客户端和/或服务器端执行此操作的选项是什么?我听说可以在Chrome上使用本地客户端,但我不喜欢客户端必须开启本地客户端标志来完成此操作。
在服务器端:
首先,CGI(通用网关接口)是使用本地C库的Web应用程序中最基本的方法 - 在其中委托可执行文件(例如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不是概念验证或类似的东西。它非常强大,并已用于将复杂的代码移植到Web上。您可以查看演示文稿(列在上面的URL中)以了解可以使用它完成什么。
看起来最好的方法是将您的传统C库方法表示为服务器端的一种(WEB)服务。原始CGI应用程序似乎是这种方法的一个相当低级别的点,但通常是正确的。 有可用的C/C++框架来创建Web服务服务器,以及支持Web服务访问和数据表示的客户端库。例如,对于服务器端,您可以使用gSoap。
c
标签的人中赢得你的粉丝,除非你只是指它是以旧/糟糕的风格编写的C代码(例如全局变量、#ifdef
混乱、不可移植的结构和未定义行为等)。 - R.. GitHub STOP HELPING ICE