如何在node.js中编写一个基于web的GUI并连续调用ac程序?

我认为这个标题很自我解释。 基本上,我有一个C程序,利用大量的数据结构来完成各种任务。 该程序必须在C中,它不必有任何的GUI,但我想做一个,因为为什么不。

程序和nodejs web服务器(如果运行的话)都将在同一台本地机器上。 他们会默认一起跑,只有我一起跑。 所以我的问题是,试图用像Node.js这样的语言来开发一个GUI,并连续调用一个C程序是否现实? 效率如何或效率低下? 有什么缺点?

就像我说的那样,我必须用C来完成这个程序。这是一个家庭作业的任务,但是我真的不想尝试在C中编写任何UI。任何其他方法都可以。 我可以使用Python和Node.js编写,而使用C ++编写的OOP足以在Direct2D中制作几个2D程序。

编辑2:程序(无论是C程序还是GUI)最终都不得不以某种方式使用数据库。 所以这可以进入任何可能的答案的基本原理,如果它意味着什么。

编辑3:我在寻找答案:是/否有可能,使用什么语言,为什么,并希望有一些图书馆的任务。

低效率:给定一个“标准”机器(比如I5-337U @ 1.7 GHz,6 GB DDR3 RAM),与GUI的交互(包括点击和input将作为参数发送给C程序,然后对所述input进行计算,所有这些都是简单的math计算,并且对于每个input将不会有超过10个简单的 (add,mult,dvd,所有<4位数字)计算)应该是完整的,如在计算完成并在一两秒钟内更新GUI的计算结果。

基于我过去的经验,我会尝试这样的事情:

前端

创build一个执行某些操作的前端,即将消息发送到RESTful服务器。 这可能是与jQuery或Angular或任何您所熟悉的框架。

服务器端

创build一个与C程序运行在同一台机器上的节点服务器。 Node很好地处理Web请求,并为您的HTTP处理select一个像Express,Restify,Koa或其他框架。

C程序

然后,以某种方式与您的C程序交谈。 你没有在你的文章中提到任何东西,但是TCP是你可能为你的C项目find的一个通用库,你可以使用核心网库 。

或者,你可以通过节点启动你的C程序,并通过标准input和它交谈! search堆栈溢出,了解如何做到这一点,但这可能比TCP更容易。

您的要求是:

  • 没有用C语言编写的GUI的程序
  • GUI和程序将在同一台机器上运行

除非Node.js是您的偏爱UI语言,否则我不会使用WEB用户界面,因为它会增加很高的开销和一些复杂性,特别是如果服务器部分必须将数据推送到界面。

剩下的就是 经验 高度的意见基础。

Python + Qt允许生成非常好的GUI程序,具有Qt的所有function和Python的写入简单性。 你甚至有一个专门的IDE: eric 。 但根据他们的经验,其他人会build议你使用其他基于Tk / gtk,wxWindows,NET / mono,java / swing的工具,它们与我的相同的参数(或缺less参数)相同:-)

从我个人的经验来看,你的C程序可以是一个基于命令行的程序,通过STDIN / STDOUT与外界交互。

GUI程序运行在浏览器中,利用各种Javascript框架,如Jquery,AngurlarJS等。

NodeJS(使用ExpressJS)作为本地HTTP服务器运行,是两者之间的完美粘合剂。

一方面,NodeJS spawn你的C程序作为一个subprocess,并通过STDIN / STDOUT与它交谈。

另一方面,NodeJS会将HTTP / AJAX / WEBSOCKET交给浏览器中的GUI。

您考虑的几个解决方法:

  1. GUI可能会发送很多JSON格式的设置给NodeJS,这将很难“转化”为C程序的命令行input。 一种方法是让NodeJS将设置保存到本地JSON文件中,并且C程序即时parsing该JSON文件以获取input参数。

  2. 浏览器窗口中的GUI可能有一些限制,例如,不能select本地文件/文件夹。 但是NodeJS可以spawn其他简单的GUI程序来为特定的目的popup一个文件select对话框窗口。 我用AutoIt脚本制作了这些简单的GUI程序,编译为独立的exe文件。

这样一个看似复杂的内核/前端架构有几个好处:

  1. graphics用户界面(GUI)框架很快就变得陈旧过时,更不用说学习与他们一起浪费的巨大努力了。 (只提一些:Win32,MFC,WinForm,WPF)。 如今,浏览器是运行GUI的新“虚拟机”。 浏览器和Javascript框架确实发展得更快。 但是它们相对比较容易编码,并且具有“新的外观”。

  2. 由于快速发展的GUI代码,将内核与GUI代码分离的很好的理由。 有可能几年之后,内核代码可以配合不同的GUI代码,并且仍然可以正常工作。

  3. 内核代码是命令行(或基于控制台)使testing/debugging/部署/扩展更容易…(整个unix理念)

  4. 浏览器的html / javascript代码,nodejs,命令行都可能是多平台(windows,linux,mac os x和mobile)并且编译,部署非常容易。 (只是文件复制/粘贴,不安装)

  5. 在本地主机上运行的本地nodejs服务器可以通过ngrok隧道传输到外部,从而使其成为一个真正的Web应用程序

  6. [待扩展]