2019-11-01 从零开始go的rpc学习- 知识铺
2019-11-01 本文已影响0人
知识铺
知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停地来唤醒记忆深处的知识点。
一、 go 原生 rpc
定义服务端:
// 1. 定义实体类型
type Gstus struct {}
/*
2. 定义service fun
Go语言的RPC规则:方法只能有两个可序列化的参数,
其中第二个参数是指针类型,
并且返回一个error类型,同时必须是公开的方法
*/
func (p Gstus) Printgs(request string, reply *string) error {
*reply = "ok:"+request
return nil
}
func main() {
// 3. 注册
rpc.RegisterName("tgs",new(Gstus))
listener, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal("ListenTCP error:", err)
}
conn, err := listener.Accept()
if err != nil {
log.Fatal("Accept error:", err)
}
// 4. 开启服务端 并监听注册端口
rpc.ServeConn(conn)
}
定义客户端
package main
import (
"fmt"
"log"
"net/rpc"
)
func main() {
client, err := rpc.Dial("tcp", "localhost:1234")
if err != nil {
log.Fatal("dialing:", err)
}
var reply string
err = client.Call("tgs.Printgs", "hello", &reply)
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
}
结果:
ok:hello
推荐阅读:
本文由zshipu.com学习笔记或整理或转载,如有侵权请联系,必改之。