pipeconn: 用go语言编写用stdio连接的 rpc server/client

0.326字数 135阅读 104

包路径: gitee.com/rocket049/pipeconn

代码托管页面链接

pipeconn用标准输入输出和管道模拟 io.ReadWriteCloser,可以用于编写不依靠网络连接的 rpc 服务器和客户端,通过它程序可以不通过网络也使用RPC方式调用另一个本机程序。

服务器方建立连接时调用pipeconn.NewServerPipeConn()

客户端建立连接时调用NewClientPipeConn(progPath , args...)

下面是示例程序:

服务端程序:

//pipe-server.go
package main
import (
    "net/rpc"
    "gitee.com/rocket049/pipeconn"
)

//定义服务类型 Arith
......

func main() {
    arith := new(Arith)
    server := rpc.NewServer()
    server.Register(arith)
    conn := pipeconn.NewServerPipeConn()
    server.ServeConn(conn)
}

客户端程序:

//pipe-client.go
package main
import (
    "net/rpc"
    "gitee.com/rocket049/pipeconn"
)

func callRpc()  error{
    conn, err := pipeconn.NewClientPipeConn("./pipe-server")
    if err != nil {
        return error
    }
    client := rpc.NewClient(conn)
    defer client.Close()
    //使用 rpc 调用
    ......
}

完整示例程序