V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zealic
V2EX  ›  Go 编程语言

go2node:让 Golang 和 Node.js 进行原生 IPC 通信

  •  1
     
  •   zealic ·
    zealic · 2019-01-25 23:37:57 +08:00 · 4320 次点击
    这是一个创建于 1926 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在 Golang 用的越来越多,但是很多时候又舍弃不了 Node.js/TypeScript 的动态特性。

    最近就有这么一个需求,某些特殊的处理逻辑需要使用动态处理和一些强反射需求,这些正好是 Go 不擅长的。

    怎么办呢?

    以前用 Node 的时候可以直接使用 process.sendprocess.on 来和子进程进行通信,以达到 fork 和多线程的效果。

    基于上述诉求,就有了 go2node 的产生。

    go2node

    go2node 借助 Node.js 本身已有的 IPC 协议,支持消息和文件描述符 (File Descirptor) 的传递,
    由于可以传递 FD,我们甚至可以让 Node 接管由 Go 监听到的网络连接。

    Node IPC 消息默认序列化使用 JSON,因此在 Go 中需要自行处理 JSON 反序列化。

    Node 不需要依赖任何第三方库,Go 的代码也仅依赖标准库,因此代码较干净。

    依托于 Golang 和 Node.js 对 WebAssembly 的支持,这个库的可玩性和灵活性大有可为。

    支持的系统:

    • Linux
    • Mac OS
    • Unix

    未来的应用系统会越来越复杂,异构系统会越来越常见,我们考虑的是用合适的语言解决合适的问题,
    开发 go2node 也是为了进行这样一种尝试,同时也算是抛转引玉,看看大家对这方面有什么好的意见。

    欢迎 StarReport Issue

    项目地址:https://github.com/zealic/go2node

    6 条回复    2019-02-01 00:17:44 +08:00
    janxin
        1
    janxin  
       2019-01-26 01:26:47 +08:00 via iPhone
    感觉 rpc 会更方便点?
    zealic
        2
    zealic  
    OP
       2019-01-26 01:29:32 +08:00
    @janxin rpc 要引入第三方包,也可能引入代码生成器,还需要写协议文件,其次不能传递 fd
    luozic
        3
    luozic  
       2019-01-26 01:46:26 +08:00 via iPhone
    为啥不学习 deno ?
    reus
        4
    reus  
       2019-01-29 00:19:34 +08:00
    go 反射可以动态构造类型,动态构造函数,几乎什么都能做,哪有不擅长
    zealic
        5
    zealic  
    OP
       2019-01-31 21:46:51 +08:00
    @reus 动态类型不支持附着函数,所以作用不大
    JSON 处理谁能有 JavaScript 擅长,试试让 go 处理一下非结构化的动态 json 看看你要多写多少代码
    reus
        6
    reus  
       2019-02-01 00:17:44 +08:00
    @zealic 你水平不行而已。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   927 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:34 · PVG 07:34 · LAX 16:34 · JFK 19:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.