Go 每日一库之 jsonrpc:来自标准库
Posted Go语言中文网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 每日一库之 jsonrpc:来自标准库相关的知识,希望对你有一定的参考价值。
简介
在上一篇文章中我们介绍了 Go 标准库net/rpc
的用法。在默认情况下,rpc
库内部使用gob
格式传输数据。我们仿造gob
的编解码器实现了一个json
格式的。实际上标准库net/rpc/jsonrcp
中已有实现。本文是对上一篇文章的补充。
快速使用
标准库无需安装。
首先是服务端,使用net/rpc/jsonrpc
之后,我们就不用自己去编写json
的编解码器了:
package main
import (
"log"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *int) error {
*reply = args.A * args.B
return nil
}
func main() {
l, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal("listen error:", err)
}
arith := new(Arith)
rpc.Register(arith)
for {
conn, err := l.Accept()
if err != nil {
log.Fatal("accept error:", err)
}
// 注意这一行
go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
}
}
直接调用jsonrpc.NewServerCodec(conn)
创建一个服务端的codec
。客户端也是类似的:
func main() {
conn, err := net.Dial("tcp", ":1234")
if err != nil {
log.Fatal("dial error:", err)
}
// 这里,这里以上是关于Go 每日一库之 jsonrpc:来自标准库的主要内容,如果未能解决你的问题,请参考以下文章