golang rpc示例
原创
©著作权归作者所有:来自51CTO博客作者冰糖豆豆的原创作品,请联系作者获取转载授权,否则将追究法律责任
rpc即远程过程调用。
在server端提供计算、文件存储等服务。在客户端去调用server端的这些服务,使客户端的业务变得简洁和高效。
server:
package main
import (
_"fmt"
"net"
"net/rpc"
"log"
)
// HelloService is rpc server obj
type HelloService struct{}
// Hello is rpc server method x.
func (p *HelloService) Hello(request string, reply *string) error {
*reply = "hello:" + request
return nil
}
// GoodLuck is rpc server method x
func (p *HelloService) GoodLuck(request string, reply *string) error {
*reply = "Good_luck:" + request
return nil
}
func main() {
rpc.RegisterName("HelloService", new(HelloService))
listener, err := net.Listen("tcp", ":1235")
if err != nil {
log.Fatal("ListenTCP error:", err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal("Accept error:", err)
}
go func() {
rpc.ServeConn(conn)
}()
}
}
client:
package main
import (
"fmt"
"log"
_ "net"
"net/rpc"
)
func main() {
client, err := rpc.Dial("tcp", "localhost:1235")
if err != nil {
log.Fatal("dialing:", err)
}
var reply string
err = client.Call("HelloService.Hello", "hello", &reply)
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
err = client.Call("HelloService.GoodLuck", "hello", &reply)
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
}
使用vscode调试。开启服务器端,开启客户端。客户端的执行结果如下:
API server listening at: 127.0.0.1:41148
hello:hello
Good_luck:hello
Process exiting with code: 0