天天看点

golang中的rpc开发

golang中实现RPC非常简单,官方提供了封装好的库,还有一些第三方的库

golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp和http数据传输方式,由于其他语言不支持gob编解码方式,所以golang的RPC只支持golang开发的服务器与客户端之间的交互

官方还提供了net/rpc/jsonrpc库实现RPC方法,jsonrpc采用JSON进行数据编解码,因而支持跨语言调用,目前jsonrpc库是基于tcp协议实现的,同时也支持http传输方式

服务端

客户端

net/rpc完成的 1. call id的映射 2. 序列化和反序列化(编码和解码)

net完成的 网络通信:tcp

go语言的rpc序列化协议是什么:Gob编码

能够替换成常见的序列化

go服务端接收的request是一个json,python客户端传递的params列表中是一个json数据

go服务端

点击查看代码

2. python客户端

同时使用json编码解码

python客户端

目录结构图

golang中的rpc开发

server.go

handler.go

server_proxy.go

client.go

client_proxy.go

上面这些概念在grpc中都有相关对应

发自灵魂的拷问:server_proxy和client_proxy能否自动生成啊?为多种语言生成?

答:上面两个问题都能解决: protobuf + grpc