Remote Procedure Call Protocol,远程过程调用协议,IPC是进程间通信,RPC是远程进程通信。
服务端:
package main import ( "fmt" "net" "net/rpc" ) // 定义类对象 type World struct { } // 绑定类方法 func (this *World) SayHello(name string, resp *string) error { *resp = name + " 你好!" return nil } func main() { // 1. 注册RPC服务,绑定对象方法 err := rpc.RegisterName("hello", new(World)) if err != nil { fmt.Println("注册RPC服务失败:", err) return } // 2. 创建RPC服务器,监听端口 listen, err := net.Listen("tcp", "127.0.0.1:8080") if err != nil { fmt.Println("net.Listen err:", err) } defer listen.Close() fmt.Println("开始监听...") // 3. 建立连接 conn, err := listen.Accept() if err != nil { fmt.Println("Accept err:", err) } defer conn.Close() fmt.Println("连接成功...") // 4. 绑定服务 rpc.ServeConn(conn) }
客户端:
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("Dial err:", err) return } defer conn.Close() // 2. 调用远程函数 var reply string err = conn.Call("hello.SayHello", "张三", &reply) if err != nil { fmt.Println("Call err:", err) return } fmt.Println("Reply:", reply) }
修改服务端代码:jsonrpc.ServeConn(conn)
修改客户端代码:conn, err := jsonrpc.Dial("tcp", "127.0.0.1:8080")
本文作者:a
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!