用go写一个rpc服务端
时间: 2023-07-20 07:43:58 浏览: 48
以下是一个简单的 Go 语言实现的 RPC 服务端代码示例:
```go
package main
import (
"fmt"
"log"
"net"
"net/rpc"
)
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *int) error {
*reply = args.A * args.B
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":1234")
if e != nil {
log.Fatal("listen error:", e)
}
defer l.Close()
fmt.Println("RPC server is listening on port 1234...")
for {
conn, err := l.Accept()
if err != nil {
log.Fatal("accept error:", err)
}
go rpc.ServeConn(conn)
}
}
```
上述代码实现了一个简单的 RPC 服务端,其中 `Arith` 结构体表示提供的服务,`Multiply` 方法用于乘法运算。在 `main` 函数中,首先创建了 `Arith` 结构体实例 `arith`,并将其注册到了 RPC 服务中心中。然后通过 `Listen` 方法监听端口,等待客户端连接,最后通过调用 `ServeConn` 方法为每个客户端连接提供服务。
需要注意的是,以上代码仅为简单示例,实际生产环境中需要考虑更多的安全性、可靠性和性能问题。