如何在node.js中编写基于Web的GUI并连续调用c程序?

时间:2014-10-10 18:48:20

标签: c node.js user-interface

我认为标题非常自我解释。 基本上,我有一个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的交互(这将涉及点击,输入将被发送到C程序一个参数,然后对所述输入进行计算,所有这些都是简单的数学计算,并且将不超过10个简单(add,mult,dvd,all< 4位数字)计算每个输入都应该是完整的,如计算完成和GUI更新计算结果,在一两秒内。

3 个答案:

答案 0 :(得分:1)

您的要求是:

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

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

剩下的是体验高度意见。

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

答案 1 :(得分:1)

根据我的见解经验,您的C程序可以是基于命令行的程序,它通过STDIN / STDOUT与外界交互。

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

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

一方面,NodeJS spawn将您的C程序作为子进程并通过STDIN / STDOUT与之对话。

另一方面,NodeJS将HTTP / AJAX / WEBSOCKET与浏览器中的GUI进行对话。

需要考虑的几种解决方法:

  1. GUI可能会以JSON格式向NodeJS发送大量设置,这很难“转换”为C程序的命令行输入。一种方法是让NodeJS将设置保存到本地JSON文件中,并且您的C程序即时解析该JSON文件以获取输入参数。

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

  3. 这种看似复杂的内核/前端架构有几个好处:

    1. GUI框架变得过时和过时,更不用说学习编程的巨大努力会浪费。 (仅举几例:Win32,MFC,WinForm,WPF)。如今浏览器是新的“虚拟机”,可以在任何地方运行GUI。确实,浏览器和Javascript框架的发展速度要快得多。但它们相对容易编码并且具有“新外观”。

    2. 由于GUI代码的快速发展,很有理由将内核与GUI代码分开。多年以后,内核代码可以使用不同的GUI代码,但仍然可以正常运行。

    3. 内核代码是命令行(或基于控制台),可以更轻松地测试/调试/部署/扩展...(整个unix哲学)

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

    5. 在localhost上服务的本地nodejs服务器可以通过ngrok在外部进行隧道传输,这样它就可以很容易地成为真正的Web应用程序

    6. [待延期]

答案 2 :(得分:0)

根据我过去的经验,我会尝试这样的事情:

<强>前端

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

服务器端

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

C计划

然后,以某种方式与您的C程序交谈。您没有在帖子中提及任何内容,但TCP是您可能为C项目找到的常用库,您可以使用core net libs

或者,您可以通过Node启动您的C程序并通过stdin与它通信!搜索堆栈溢出以获取有关如何执行此操作的提示,但这可能比TCP更容易。