进程间通信的另类实现
来源:互联网 发布:部落冲突疗伤法术数据 编辑:程序博客网 时间:2024/06/07 07:51
背景
Node.js 内置的进程间通信使用非常简单,但也有一定的局限性,只能在父子进程间通信。下面是官方文档给的一个例子。
首先是父进程的 parent.js :
12345678
const cp = require('child_process');const n = cp.fork(`${__dirname}/sub.js`);n.on('message', (m) => { console.log('PARENT got message:', m);});n.send({ hello: 'world' });
接着再看看子进程 sub.js 的实现:
12345
process.on('message', (m) => { console.log('CHILD got message:', m);});process.send({ foo: 'bar' });
如果两个进程间没有父子这种亲缘关系又如何通信呢,本文就为大家讲解 Midway 5.0
中如何使用更灵活的 socket 实现任意进程间的通信。
协议设计
既然是通信,那么通信协议的设计是必不可少的。就像以前经常在电影里看到的两个人通话时,都会加上一句 over
来告知对方自己要说的已经说完了。父子进程间的通信协议也采用了这种最简单最高效的方式,双方在发送消息时都会在消息末尾加上一个回车符 n
,表示本次发送的消息就这么多,也就是对方就收消息时遇到 n
表明本次消息接收完毕。
消息接收后需要对其进行解码,或者说是反序列化,最终便于识别和使用。父子进程间通信就采用了 JSON.encode 和 JSON.decode 来实现消息的编码和解码。
父子进程间采用的这种通信协议非常的简单,但是也非常高效,能够满足大部分使用场景。像 HSF 这类 RPC 调用通信协议就比较复杂了,我们平时遇到最多的就是 HTTP 协议,做 web 开发的同学肯定都比较清楚协议的规则了。
本次实现的利用 socket 实现进程间通信也采用这种最简单的方式。
实现
实现协议之前回想一下整个通信的流程,首先双方建立一条全双工的通信信道,待 2 边都 ready 后消息便可以发送消息了,2 边既是消息的接收方也是消息的发送方。我们平时会将一方称为 server
,另一方称为client
,这是在功能上的划分,一般 server 会有多个client 同时连接。
协议解析
在双方开始通信之前,我们先来实现协议的解析 parse.js
,非常....
更多内容看原文:http://www.lindukj.cn/news/archives/295
- 进程间通信的另类实现
- 进程间通信的另类实现
- 如何实现进程间的通信
- 如何实现进程间的通信
- 如何实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用管道实现进程间的通信
- 自定义消息实现进程间的通信
- 使用AIDL实现进程间的通信
- 如何实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- 使用AIDL实现进程间的通信
- iOS - QRCode(二维码)的生成和识别
- 邮箱大师添加outlook2010 方法 图文详解
- swift 之actionSheet 使用
- WEB免费打印控件推荐
- C++实现——大数乘以小数
- 进程间通信的另类实现
- adb工具(通用的调试工具、debug工具)&操作命令详解
- java解析ajax之json字符串
- 从0开始搭建主流框架(纯代码)
- 6.8.3 qmgr_job_entry_select函数:选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体
- 利用请求头Referer防止盗链
- 纠结很久的问题 在SSH下,Dao Service 下 baseService 为NULL的问题
- 天下第一---(spfa判环)
- __declspec(novtable) 的用法 .