rpc使用步骤
服务端
- 注册rpc 的服务对象。给对象绑定方法
rpc.RegisterName("服务名",回调对象)
1.需要定义类
2.需要绑定类方法
- 需要创建监听器
listener,err := net.Listen()
- 建立链接
conn,err := listener.Accept()
- 将链接绑定 rpc服务
rpc.ServerConn(conn)
客户端
- 用rpc链接服务器 rpc.Dial()
conn,err:=rpc.Dial()
- 调用远程函数
conn.Call("服务名.方法名",传入参数,传出参数)
server端
package main
import (
"fmt"
"net"
"net/rpc"
)
type World struct {
}
func (this *World) HelloWorld(name string, resp *string) error {
*resp = name + " 你好!"
return nil
}
func main() {
//1,注册rpc服务 绑定对象方法
err := rpc.RegisterName("hello", new(World))
if err != nil {
fmt.Println("注册出错:", err)
return
}
//2.设置监听
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("监听出错:", err)
return
}
defer listener.Close()
fmt.Println("开始监听---------")
// 3,建立链接
conn, err := listener.Accept()
if err != nil {
fmt.Println("Accept err:", err)
return
}
defer conn.Close()
fmt.Println("链接建立成功----------")
// 4.绑定服务
rpc.ServeConn(conn)
}
client端
package main
import (
"fmt"
"net/rpc"
)
func main() {
// 1.用rpc链接服务器
conn, err := rpc.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("客户端链接出错000000:", err)
}
defer conn.Close()
// 2.调用远程函数
var reply string
err = conn.Call("hello.HelloWorld", "李白", &reply)
if err != nil {
fmt.Println("Call出错:", err)
}
fmt.Println("reply-------------")
fmt.Println(reply)
}
修改客户端
修改客户端使用jsonrpc
conn,err := jsonrpc.Dial("tcp","127.0.0.1:8080")
服务器端修改
修改服务器端 使用jsonrpc
jsonrpc.SverveConn(conn)//修改服务绑定
如果绑定方法返回值的error 不为空 无论传出参数是否有值,服务端都不会返回数据