golang rpc示例

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

发布了95 篇原创文章 · 获赞 75 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/jacky128256/article/details/104746334