Server
- 创建要导出的接口对象:new(API)
- 注册接口:rpc.Register(api)
- 创建网络监听端口:net.Listen(protocol, addr)
- 托管客户端请求处理:rpc.Accept()
package main
import (
"fmt"
"log"
"net"
"net/rpc"
)
type Test struct {}
func (*Test) Inc(in int32, out *int32) error {
*out = in + 1
return nil
}
func (*Test) Hi(in string, out *string) error {
*out = fmt.Sprintf("Hello,%s!\n", in)
return nil
}
func main() {
test := new(Test)
rpc.Register(test)
ln, err := net.Listen("tcp", ":2018")
if err != nil {
log.Fatal("Listen() failed", err)
}
rpc.Accept(ln)
}
Client
package main
import (
"fmt"
"log"
"net/rpc"
)
func main() {
cli, err := rpc.Dial("tcp", "localhost:2018")
if err != nil {
log.Fatal("Dial() failed", err)
}
var ret int32
err = cli.Call("Test.Inc", 2018, &ret)
if err != nil {
log.Fatal("Call() failed", err)
}
fmt.Printf("Result: %d\n", ret)
var ret2 string
err = cli.Call("Test.Hi", "weicky", &ret2)
if err != nil {
log.Fatal("Call() failed", err)
}
fmt.Printf("Result: %s\n", ret2)
}