进程之间通信方式
西就能完全满足日常的工作需要。 我们今天想讨论的问题主要是第 3 个:传递数据,在上面这几种传递数据的方法中,我最喜欢、最常用的就是 Socket 通信。 有些小伙伴可能会说:Socket 通信就是 TCP/IP 的那一套东西,还需要自己管理连接、对数据进行组包、分包,也是挺麻烦的。 没错,Socket 通信本身的确需要手动来处理这些底层的东西,但是我们可以给 Socket 穿上一层“外衣”:利用 MQTT 消息总线,在系统的各进程之间进行数据交互,下面我们就一一道来。 二、基于 Socket 通信的优点 这里我就不自己发挥了,直接引用陈硕老师的那本书《Linux 多线程服务端编程》这本书中的观点(第 65 页,3.4小节): 1. 跨主机,具有伸缩性 反正都是多进程了,如果一台机器的处理能力不够,就能用多台主机来处理。把进程分散到同一台局域网的多台机器上,程序改改 Host:Port 配置就能继续用。相反,文章开头部分列出的那些进程之间通信方式都不能跨机器,这就限制了可扩展性。 2. 操作系统会自动回收资源 TCP port 由一个进程独占,当程序意外退出时,操作系统会自动回收资源,不会给系统留下垃圾,程序重启之后能比较容易地恢复。 3. 可记录、可重现 两个进程通过 TCP 通信,如果一个崩溃了,操作系统会关闭连接,另一个进程几乎立刻就能感受到,可以快速 failover。当然应用层的心跳是必不可少的。(补充:操作系统本身对于 TCP 连接有一个保活时间,默认是 2 个小时,而且是针对全局的。) 4. 跨语言 服务端和客户端不必使用同一种编程语言。 1. 陈硕老师描述的是通用的 Socket 通信,因此客户端和服务端一般位于不同的物理机器上。 2. 在嵌入式开发中,一般都是用同一种编程语言,因此,跨语言这个有点可以忽略不计了。 三、MQTT 消息总线 1. MQTT 是一个通信的机制
对物联网领域熟悉的小伙伴,对于 MQTT 消息总线一定非常熟悉,目前几大物联网云平台(亚马孙、阿里云、华为云)都提供了 MQTT 协议的接入方式。 (编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |