用Go写一个RPC服务器教程

106 阅读2分钟

这篇文章是该系列的一部分 GoLang:建立一个网络服务器

嘿,各位编码员,在上一篇文章中,我们学习了如何编写Fx模块,并在我们的项目中添加了一个日志模块。继续在同一个代码库中,我们将添加对RPC请求的支持。

什么是RPC?

RPC是指远程程序调用。它是一种进程间通信,使用间接方法在接收方和发送方之间传递信息,以便在两者之间建立一个通道。

RPC通常用于客户端/服务器架构的通信。RPC被广泛使用和接受的主要原因是它能使物理层和逻辑层解耦。参与通信的各方都不需要了解对应方或传输机制的实现细节,只需要关注输入和输出。

一个基本的RPC服务器

我们将使用Go的net/rpc包来建立我们的RPC服务器。为此,我们需要对我们到目前为止所写的代码做一些修改。

  1. 我们将在钩子的onStart块中添加net.Listen,这将确保我们能够监听到RPC请求。
// start the rpc server

goroutine中的for循环确保我们无限期地监听所有通过8081端口发出的请求。到目前为止,还没有专门针对RPC的内容。

2.2.接下来,我们添加一个简单的RPC处理程序,其工作是通过网络公开一个方法。

import (

// User message

// Handler is the struct which exposes the User Server methods

注意:为了便于理解,我在代码中加入了用户实体,它与RPC的核心逻辑没有关系。

3.3.最后的改变是为我们的Fx模块提供服务器,以便它可以被初始化。

fx.New(

有了这个,我们的RPC服务器就到位了。我们所需要做的就是执行go run main.go。

仍然没有答案的问题是,我如何在没有RPC客户端的情况下测试我的RPC服务器?下面的代码片段可以帮助你测试你的服务器。你可以把它作为一个独立的main方法来运行,并进行同样的测试。正在发生的 "RPCing"!

client, _ := rpc.Dial("tcp", "localhost:8081")

当你在日常项目中使用Go中的RPC时,我们上面所做的既不具有扩展性,也不容易编写/维护。这就是gRPC拯救世界的地方。在下一篇文章中,我们将探讨如何使用gRPC和Protobuf来编写一个具有生产质量的Golang RPC服务器。

编码趣事:"C "编程语言的前身叫 "B"