服務端
package main
import (
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type HelloWord struct {
}
func (this *HelloWord) SayHello(name string, revc *string) error {
*revc = name + " 你好啊!"
return nil
}
func main() {
// 注冊一個rpc服務
err := rpc.RegisterName("Hello", &HelloWord{})
if err != nil {
fmt.Println("注冊rpc失敗",err)
return
}
// 啟動tcp監聽
lisert, err := net.Listen("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("啟動監聽錯誤",err)
return
}
fmt.Println("等待用戶端連接配接")
// 建立tcp連接配接
conn, err := lisert.Accept()
if err != nil {
fmt.Println("建立連接配接錯誤")
return
}
// 将連結轉給rpc解析收資料
//rpc.ServeConn(conn)
jsonrpc.ServeConn(conn)
defer lisert.Close()
defer conn.Close()
}
用戶端
package main
import (
"fmt"
"net/rpc/jsonrpc"
)
func main() {
// 連接配接服務端
server, err := jsonrpc.Dial("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("連接配接服務端失敗")
return
}
// 建立一個參數來接受遠端函數的傳回值
var reply string
//調用遠端函數
server.Call("Hello.SayHello", "張三", &reply)
fmt.Println(reply)
defer server.Close()
}