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客户端
目录结构图

server.go
handler.go
server_proxy.go
client.go
client_proxy.go
上面这些概念在grpc中都有相关对应
发自灵魂的拷问:server_proxy和client_proxy能否自动生成啊?为多种语言生成?
答:上面两个问题都能解决: protobuf + grpc