Go日记——反向RPC
Posted Guardians
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go日记——反向RPC相关的知识,希望对你有一定的参考价值。
背景
3|func (p *HelloService) Hello(request string, reply *string) error {
4| *reply = "hello:" + request
5| return nil
6|}
2| rpc.Register(new(HelloService)) 3|
4| for {
5| conn, _ := net.Dial("tcp", "localhost:1234")
6| if conn == nil {
7| time.Sleep(time.Second)
8| continue
9| }
10|
11| rpc.ServeConn(conn)
12| conn.Close()
13| }
14|}
RPC客户端
2| listener, err := net.Listen("tcp", ":1234")
3| if err != nil {
4| log.Fatal("ListenTCP error:", err)
5| }
6| 7| clientChan := make(chan *rpc.Client)
8|
9| go func() {
10| for {
11| conn, err := listener.Accept()
12| if err != nil {
13| log.Fatal("Accept error:", err)
14| }
15|
16| clientChan <- rpc.NewClient(conn)
17| }
18| }()
19|
20| doClientWork(clientChan)
21|}
2| client := <-clientChan
3| defer client.Close()
4|
5| var reply string
6| err = client.Call("HelloService.Hello", "hello", &reply)
7| if err != nil {
8| log.Fatal(err)
9| }
10|
11| fmt.Println(reply)
12|}
以上是关于Go日记——反向RPC的主要内容,如果未能解决你的问题,请参考以下文章
我被Go反射折磨48小时后,反被我拿捏!!| 实习日记Go反射