这个问题真的很广泛。有了这个答案,我将尝试将重点放在概念和概述上。负债太难了,因为选择太多了。
文件与进程
文件由字节组成。它们可用于对许多不同类型的内容进行编码。字节可以编码文本、音乐、视频、逻辑……
可以包含用编程语言编写的可执行逻辑的文本文件。在大多数情况下,您需要先编译这些文本文件,以创建一个“二进制”或“可执行文件”,然后由操作系统执行。
程序或应用程序由二进制文件组成。
可以执行二进制文件。二进制/可执行文件的运行实例称为“进程”。
执行后台任务的二进制文件通常称为“服务”。服务通常安排在操作系统启动/停止时运行。
协议
当一个进程启动时,它可以读写数据到终端。它使用 3 个不同的流来做到这一点。标准输入、标准输出、标准错误。这是应用程序与用户通信的最基本方式。它还可以用于与其他应用程序通信。
以类似的方式,您也可以使用流通过其他渠道进行通信。
当不同的应用程序相互通信时,它们需要通过交换消息以结构化的方式进行。该结构需要尊重所谓的“通信协议”。有时协议依赖于其他协议。
在更高的层次上,应用程序相互通信,通常想要提供一组命令,或者想要共享一组功能。远程执行代码通常称为“RPC”(远程过程调用)。一组这些共享函数通常称为“API”。
通常提供的功能可以分为 4 类:创建/读取/更新/删除操作,缩写为“CRUD”。
网络通信
当进程位于不同的计算机上时,它们需要通过内部(例如办公室网络)或公共网络(例如互联网)进行通信
当今的大多数网络都使用以太网协议(即 RJ45 电缆或 wifi),最重要的是,它们使用 IP 地址来唯一标识每台计算机。通信通常使用 TCP 完成(这是一种协商,其中一端侦听预定端口上的传入连接,另一端连接到它。然后双方可以发送/接收消息)。这一起被称为“TCP/IP”。大多数现代通信协议都基于 TCP/IP(尽管还有其他流行的协议)。
TCP/IP 描述了设备如何创建连接,以及它们如何相互发送字节,但并未规定这些字节的组织方式。内容本身也需要协议。从历史上看,有很多,有些是编码的,有些是基于文本的。
网络浏览器使用 HTTP 协议进行通信。这本身就是两个应用程序之间通信的协议。即网络浏览器和网络服务器。但是,HTTP 协议也可以作为其他通信协议的基础,例如 REST。
REST 是一种用于不同应用程序之间通信的 Web 服务协议。并且可能是当今最受欢迎的。
实时通信
在许多情况下,如何触发通信以及哪些事件导致通信开始很重要。
例如在像 REST 这样的协议中,有一个客户端和一个服务器。服务器从不先联系客户端。发起通信的是客户端。
一些协议在客户端和服务器之间保持活动连接,并允许双向推送数据。
有时一条消息需要立即响应。相比之下,在其他情况下,请求存储在“队列”中并在稍后阶段进行处理。 (同步与异步通信)。
有些人更喜欢通过充当缓冲区的第 3 方进行通信,即所谓的“消息总线”。 (请参阅:kafka、rabbitMQ、Java 的 JMS,...)。这些技术更适合异步通信,而对于同步通信不太实用。它们非常适合松耦合系统。
结论
-
文件不通信,进程或服务可以。
-
协议的选择很困难,因为有很多选择。
-
没有万能的解决方案。