Go微服务

43次阅读
没有评论

共计 1032 个字符,预计需要花费 3 分钟才能阅读完成。

RPC 协议

Remote Procedure Call Protocol,远程过程调用协议,IPC 是进程间通信,RPC 是远程进程通信。

服务端和客户端编码实现

服务端:

package main

import (
  "fmt"
  "net"
  "net/rpc"
)

// 定义类对象
type World struct {
}

// 绑定类方法
func (this *World) SayHello(name string, resp *string) error {
  *resp = name + " 你好!"
  return nil
}

func main() {
  // 1. 注册 RPC 服务,绑定对象方法
  err := rpc.RegisterName("hello", new(World))
  if err != nil {fmt.Println(" 注册 RPC 服务失败:", err)
    return
  }

  // 2. 创建 RPC 服务器,监听端口
  listen, err := net.Listen("tcp", "127.0.0.1:8080")
  if err != nil {fmt.Println("net.Listen err:", err)
  }
  defer listen.Close()
  fmt.Println(" 开始监听...")

  // 3. 建立连接
  conn, err := listen.Accept()
  if err != nil {fmt.Println("Accept err:", err)
  }
  defer conn.Close()
  fmt.Println(" 连接成功...")

  // 4. 绑定服务
  rpc.ServeConn(conn)
}

客户端:

package main

import (
  "fmt"
  "net/rpc"
)

func main() {
  // 1. 用 RPC 连接服务器
  conn, err := rpc.Dial("tcp", "127.0.0.1:8080")
  if err != nil {fmt.Println("Dial err:", err)
    return
  }
  defer conn.Close()

  // 2. 调用远程函数
  var reply string
  err = conn.Call("hello.SayHello", " 张三 ", &reply)
  if err != nil {fmt.Println("Call err:", err)
    return
  }

  fmt.Println("Reply:", reply)
}

JSON 版 RPC

修改服务端代码:jsonrpc.ServeConn(conn)

修改客户端代码:conn, err := jsonrpc.Dial("tcp", "127.0.0.1:8080")

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2024-02-27发表,共计1032字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)