node-go-ipc
v0.0.1-beta.7
Published
Cross-language IPC library for Node.js/TypeScript and Go communication
Maintainers
Readme
node-go-ipc
Node.js/TypeScript 和 Go 之间的跨语言 IPC 通信库,基于 Unix domain sockets。
安装
Node.js/TypeScript
npm install node-go-ipcGo
go get github.com/leookun/node-go-ipcAPI
Node.js/TypeScript
创建连接
import { Connect } from 'node-go-ipc';
const node = new Connect(socketPath: string, options: NodeOptions);
await node.connect();注册方法
node.register(methodName: string, handler: (args: any) => any);示例:
node.register('add', (args: number) => {
return args + 1;
});调用远程方法
const result = await node.call(nodeName: string, method: string, args: any);示例:
const result = await node.call('node1', 'add', 1);
console.log(result); // 2事件
node.on('connect', () => {});
node.on('disconnect', () => {});
node.on('error', (error: Error) => {});关闭连接
await node.close();Go
创建连接
import (
"github.com/leookun/node-go-ipc/golang/peer"
"github.com/leookun/node-go-ipc/golang/protocol"
)
p, err := peer.NewPeer(socketPath string, options peer.NodeOptions)
if err != nil {
// 处理错误
}
err = p.Connect()注册方法
p.Register(methodName string, handler func(args protocol.MethodArgs) (interface{}, error))示例:
p.Register("add", func(args protocol.MethodArgs) (interface{}, error) {
num := args.(float64)
return num + 1, nil
})调用远程方法
result, err := p.Call(nodeName string, method string, args interface{})示例:
result, err := p.Call("node1", "add", 1.0)
if err != nil {
// 处理错误
}
fmt.Println(result) // 2关闭连接
p.Close()配置
interface NodeOptions {
name: string; // 节点唯一名称(必填)
autoReconnect?: boolean; // 断线自动重连(默认:true)
reconnectInterval?: number; // 重连间隔,单位毫秒(默认:1000)
reconnectMaxAttempts?: number; // 最大重连次数(默认:10)
requestTimeout?: number; // 请求超时时间,单位毫秒(默认:5000)
heartbeatInterval?: number; // 心跳间隔,单位毫秒(默认:3000)
logLevel?: 'debug' | 'info' | 'warn' | 'error'; // 日志级别(默认:'info')
}Go 对应配置:
type NodeOptions struct {
Name string
AutoReconnect bool
ReconnectInterval time.Duration
ReconnectMaxAttempts int
RequestTimeout time.Duration
HeartbeatInterval time.Duration
LogLevel string
}示例
Node.js 示例
import { Connect } from 'node-go-ipc';
const node1 = new Connect('connect.socket', {
name: 'node1',
});
await node1.connect();
node1.register('add', (args: number) => {
return args + 1;
});Go 示例
package main
import (
"fmt"
"github.com/leookun/node-go-ipc/golang/peer"
)
func main() {
p, _ := peer.NewPeer("connect.socket", peer.NodeOptions{
Name: "node2",
})
p.Connect()
result, _ := p.Call("node1", "add", 1.0)
fmt.Println(result) // 2
}许可证
MIT
