我认为标题非常自我解释。 基本上,我有一个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更新计算结果,在一两秒内。
答案 0 :(得分:1)
您的要求是:
除非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进行对话。
需要考虑的几种解决方法:
GUI可能会以JSON格式向NodeJS发送大量设置,这很难“转换”为C程序的命令行输入。一种方法是让NodeJS将设置保存到本地JSON文件中,并且您的C程序即时解析该JSON文件以获取输入参数。
浏览器窗口中的GUI可能有一些限制,例如,无法选择本地文件/文件夹。但是NodeJS可以spawn
其他简单的GUI程序为特定目的弹出文件选择对话窗口。我用AutoIt脚本制作了这些简单的GUI程序,编译成独立的exe。
这种看似复杂的内核/前端架构有几个好处:
GUI框架变得过时和过时,更不用说学习编程的巨大努力会浪费。 (仅举几例:Win32,MFC,WinForm,WPF)。如今浏览器是新的“虚拟机”,可以在任何地方运行GUI。确实,浏览器和Javascript框架的发展速度要快得多。但它们相对容易编码并且具有“新外观”。
由于GUI代码的快速发展,很有理由将内核与GUI代码分开。多年以后,内核代码可以使用不同的GUI代码,但仍然可以正常运行。
内核代码是命令行(或基于控制台),可以更轻松地测试/调试/部署/扩展...(整个unix哲学)
浏览器的html / javascript代码,nodejs,命令行都可以是多平台(windows,linux,mac os x和mobile),并且很容易编译和部署。 (只是文件复制/粘贴,无需安装)
在localhost上服务的本地nodejs服务器可以通过ngrok
在外部进行隧道传输,这样它就可以很容易地成为真正的Web应用程序
[待延期]
答案 2 :(得分:0)
根据我过去的经验,我会尝试这样的事情:
<强>前端强>
创建一个可以执行某些操作的前端,即将消息发送到RESTful服务器。这可以使用jQuery或Angular或您熟悉的任何框架。
服务器端
创建与C程序在同一台计算机上运行的节点服务器。 Node很好地处理Web请求,并为您的HTTP处理选择一个类似Express,Restify,Koa或其他的框架。
C计划
然后,以某种方式与您的C程序交谈。您没有在帖子中提及任何内容,但TCP是您可能为C项目找到的常用库,您可以使用core net libs。
或者,您可以通过Node启动您的C程序并通过stdin与它通信!搜索堆栈溢出以获取有关如何执行此操作的提示,但这可能比TCP更容易。