补充rpc
This commit is contained in:
parent
8fb74b563e
commit
407c000975
@ -1,7 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
"io"
|
||||||
|
"net/http"
|
||||||
"net/rpc"
|
"net/rpc"
|
||||||
"net/rpc/jsonrpc"
|
"net/rpc/jsonrpc"
|
||||||
|
|
||||||
@ -26,6 +27,15 @@ func (h *HelloServiceServer) Hello(request *service.HelloRequest, response *serv
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewRPCReadWriteCloserFromHTTP(w http.ResponseWriter, r *http.Request) *RPCReadWriteCloser {
|
||||||
|
return &RPCReadWriteCloser{w, r.Body}
|
||||||
|
}
|
||||||
|
|
||||||
|
type RPCReadWriteCloser struct {
|
||||||
|
io.Writer
|
||||||
|
io.ReadCloser
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 1. 把业务 注册给RPC
|
// 1. 把业务 注册给RPC
|
||||||
// 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error
|
// 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error
|
||||||
@ -34,22 +44,14 @@ func main() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 启动RPC服务
|
// RPC的服务架设在“/jsonrpc”路径,
|
||||||
listener, err := net.Listen("tcp", ":1234")
|
// 在处理函数中基于http.ResponseWriter和http.Request类型的参数构造一个io.ReadWriteCloser类型的conn通道。
|
||||||
if err != nil {
|
// 然后基于conn构建针对服务端的json编码解码器。
|
||||||
panic(err)
|
// 最后通过rpc.ServeRequest函数为每次请求处理一次RPC方法调用
|
||||||
}
|
http.HandleFunc("/jsonrpc", func(w http.ResponseWriter, r *http.Request) {
|
||||||
defer listener.Close()
|
conn := NewRPCReadWriteCloserFromHTTP(w, r)
|
||||||
for {
|
rpc.ServeRequest(jsonrpc.NewServerCodec(conn))
|
||||||
conn, err := listener.Accept()
|
})
|
||||||
if err != nil {
|
|
||||||
continue
|
http.ListenAndServe(":1234", nil)
|
||||||
}
|
|
||||||
// 用户的net层数据 转交给 rpc框架
|
|
||||||
// go rpc.ServeConn(conn)
|
|
||||||
// json codec(server)
|
|
||||||
// req(bytes) --> obj
|
|
||||||
// resp(obj) --> bytes
|
|
||||||
go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user