有个梨UGlee
2019-12-11 04:08:03 发布
suppose网络里很多nodejs设备,都做了沙箱,即没有提供require功能但是在sandbox里在global上放了一堆常用函数。
我们从一个A节点开始,就像shell一样写一段node js程序,但是它可以显式指定一部分代码运行在网络中的哪个节点上,和require的做法类似,把source包成一个大函数然后to string即可发到另一个沙箱里执行。
这里统一抽象的方式有两个。
第一个抽象是类似RPC的做法,形式上可以是:
node[1].run(f, callback)
这个callback是本地执行的,f是远端执行的,callback获得的结果数据可以是从远程节点返回的JSON。本质上这个做法和云上的lambda很接近。它牛逼的地方是,在node这种纯异步的代码形式下你可以混写代码。
这就像在C里面写spawn,父进程和子进程代码是一套的,对开发来说非常方便。
第二个抽象是类似pipe的做法。pipe本质上,对node的设计来说,就是readable和writable。
那么代码形式上可以是创建一个readable在node A上,创建一个writable在node B上,然后就是node经典的pipe函数。但是背后是a和b直接走网络连接把数据pipe过去了。
这两个形式在node里都是和现有的异步和流代码很兼容的。包括emitter,也可以有remote emitter。
这个能力虽然不说是其它很多语言做不到,但是就算能做到,也完全不会象node这样纯异步加上js动态和可eval做起来简单。
这个才是真正的网络编程。现在的RPC种种,restful之流,都太玩具了。包括docker也一样是个补丁技术。
iot时代,nodejs想不红都难。