进程间通信的另类实现
2016-04-07 15:32
162 查看
背景
Node.js 内置的进程间通信使用非常简单,但也有一定的局限性,只能在父子进程间通信。下面是官方文档给的一个例子。首先是父进程的 parent.js :
1 2 3 4 5 6 7 8 | 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' }); |
1 2 3 4 5 | 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
相关文章推荐
- JavaMail使用SMTP协议发送电子邮件
- Eclipse中.xml , .propertise 为后缀的文件中文乱码
- php 前台数据显示
- C#中将数据的格式显示为千分位显示格式
- [疯狂Java]SQL-DML:插入、修改、删除记录
- 一个产品的完整生命周期
- Sublime Text 3 配置python开发环境遇见的问题
- 6.9.1.1 qmgr_defer_todo:为延迟邮件清理待发送收件人列表
- Win7下Python2.7环境安装paramiko模块
- php 前台数据显示
- php 前台数据显示
- 详解Android Material设计中阴影效果的实现方法
- 判断二叉树是否为平衡二叉树
- 判断二叉树是否为平衡二叉树
- Linux 冒号(:) --空指令
- AlarmManager 定时任务
- PP助手类应用探究
- Java是编译型语言还是解释型语言
- 6.9 处理邮件的延迟
- 6.9.1 qmgr_ defer.c:销毁活动数据