怎么做个不用网络的软件?

大家好,我是鱼皮,昨天收到了一位我 知识星球 内小伙伴的提问,问题如下:

鱼皮你好,我想问一下关于软件开发的,现在我知道的软件开发都是前端三件套然后 vue 或 react 框架,后端 springboot springmvc、Javaweb 这些技术。前端页面需要调用后端接口来调用函数,这个接口应该是通过网络实现的吧?

但是 emmmm 就是如果开发一个不用网络的小的软件,好像就是 Windows 桌面应用那样的(类似记事本或者 Dev c ++编译器)应该用什么做前端什么做后端呢?因为我感觉前端的三件套是没有办法写一些复杂函数的所以我觉得如果做一个没有网络的软件好像不能用前端三件套。那应该用什么呢 C#、QT 吗?

我不知道现在都是用什么技术做这些桌面应用(没有网络的),就是不知道如果没有网络如何联系到函数?因为我也学过Android Studio 可以开发,Android Studio 就是没有网络功能的,可以用 Java 来实现稍微复杂的点击事件,它有整合在一起。

但是前端三件套没有办法用 Java 除非用网络端口好像。就是有点疑惑如果不用网络怎么实现调用 Java 函数(或者 Python 函数)?

问题很长,总结一下就是一句话:怎么做个不用网络的软件?

首先我觉得这位同学应该是最近接触了很多前端或后端方面的知识、了解了 API 接口调用等,才导致自己有一点点 “小迷糊了”。

其实仔细想一想,我们刚开始学计算机时接触的第一行代码 Hello World、在小黑框里运行的那些算法不正是不用网络的软件么?只不过可能没有用户界面,丑了点罢了。

为什么现在绝大多数的应用都依赖网络呢?有两方面原因,首先是因为用户是从自己电脑上访问远程服务器上的代码和数据,没有网络玩个锤子;其次就是因为很多应用依赖的功能可能不是写在自己的系统里(比如使用某某云等第三方服务)、或者和自己的系统不兼容(比如自己的应用是 Java 写的,需要的功能是用 C++ 写的),通过使用网络 API 接口可以屏蔽系统 / 应用间的差异,也就是:怎么实现我不管,我给你发请求,你给我需要的响应就行。

那如果想开发不需要网络的应用,我们就可以从这两方面去下手。

第一个思路:能不能把应用的前端和后端逻辑代码、以及所有的数据放在一起?这里的一起是指把代码写在一起(比如同一个根目录下)、以及使用相同的语言。

当然可以!就像上面举的例子,我们可以用 C 语言等几乎 任何编程语言 来编写算法、前端界面和 “后端” 逻辑。比如写桌面端应用可以用 C++ 的 QT Creator、前端 JavaScript + Electron / Tauri、C#、Rust、Java Swing / JavaFX、Python Tkinter 等等(并不是说前端三件套只能写网页);写后端逻辑也可以用 C 语言、C++、Java、Python、Go 等等你听说过的人和编程语言。只不过没有网络的话,那就直接把这些代码全部写在一个项目里就行了,至于数据存储的话,可以用 H2、SQLite 等支持直接在内存运行的数据库,当然也可以自己分配块内存、new 个对象啥的来存储数据。

C++ QT Creator

第二个思路:如果没有网络,并且我们还不把代码写在一起,可能是多个不同语言编写的程序放在了同一个机器上,那有什么办法让代码之间互相调用呢?

这里我想到了 2 种方法,第一种方法是使用一些类库来调用其他语言的代码,比如 Java 调用 Python 脚本可以用 Jython,一个 Java 语言的 Python 实现:

Jython:https://www.jython.org/

当然,Java 调用 C++ 就更简单了(毕竟 Java 就是用 C++ 写的!),使用 Java 的 本地方法 特性,找到同一台电脑上的 C++ 的动态链接库文件调用即可:

借一张网图

如果语言本身不支持调用其他语言、也没有什么第三方的类库,那就干脆去调用命令行工具,运行其他语言的脚本或 exe 之类的文件,也能实现同样的效果。比如 Java 的 Runtime.exec() 方法,用来执行外部程序或命令。你可以用 Java 去打开记事本.exe,也可以让 Java 执行 cmd 的关机命令~

第二种方法属于曲线救国。如果没有网络,并不是说我们就不能发送请求了,只不过不能向本机之外的服务器发送请求而已。所以我们可以在本地启动服务,然后通过请求 localhost:port 本机地址去访问本地的其他代码。我们在本地开发调试前后端项目的时候,不都是这样做的么?

这样也完全可以实现前后端分离、甚至就连微服务也不在话下!

加入星球

👉🏻 点此加入星球