前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go RPC 实现了简单的远程调用过程

go RPC 实现了简单的远程调用过程

作者头像
贵哥的编程之路
发布2024-03-25 08:07:24
550
发布2024-03-25 08:07:24
举报

在运行go文件的地方:新建server(服务端)与client(客户端)目录,在里面都写上main.go文件

server(服务端)main.go

代码语言:javascript
复制
package main
import (
"fmt"
"net"
"net/rpc"
)
//定义了一个结构体 FoodService
/*FoodService 结构体用于定义一个远程服务,其中包含了一个名为 SayName 的远程方法。
客户端可以通过调用这个方法来请求服务端对特定任务进行处理,
比如在输入的请求字符串前面添加固定的前缀字符串。*/
type FoodService struct{
	
	
}
//SayName 方法是我们在服务端定义的远程函数,它接收一个字符串参数 request,并返回一个字符串指针 resp 和一个错误(error)。
func (f *FoodService) SayName(request string,resp *string) error{
	*resp="cyg"+request
	return nil
}
func main(){
	listener,err:=net.Listen("tcp",":9090")
	if err!=nil{
		fmt.Println(err)
		return 
	}
	//注册了FoodService结构体代表了与RPC关联起来
	err=rpc.RegisterName("FoodService",&FoodService{})
	if err != nil {
		fmt.Println(err)
		return
	}
	/*然后程序会阻塞在 listener.Accept() 上,
	等待客户端的连接请求。一旦有客户端连接进来,就会调用 rpc.ServeConn 来处理该连接上的所有 RPC 请求。*/
	conn,err:=listener.Accept()
	if err != nil {
		fmt.Println(err)
		return
	}
	rpc.ServeConn(conn)
}

client:main.go(客户端)

代码语言:javascript
复制
package main

import (
	"fmt"
	"net/rpc"
)
func main(){
	//首先通过 rpc.Dial 连接到指定的 RPC 服务端
	c,err:=rpc.Dial("tcp","localhost:9090")
	if err != nil {
		fmt.Println(err)
		return
	}
	reply:=""
	//然后调用 c.Call 来远程调用 FoodService 中的 SayName 方法,并传入参数 "cxyg"。
	err=c.Call("FoodService.SayName","cxyg",&reply)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(reply)//最后打印出从远程服务器返回的结果。
}

首先运行服务端的main.go文件

然后不要关闭服务端的main.go运行文件。然后运行客户端的main.go文件

什么事RPC?

服务端指的是接收客户端请求并提供相应服务的程序。当客户端发起远程调用请求时,服务端程序会接收这个请求,并执行相应的远程过程或方法,然后将结果返回给客户端。

具体来说,在RPC中:

服务端负责实现远程方法或过程,并对外提供这些方法的调用接口。 客户端发起调用请求,服务端接收请求并执行相应的方法,最终将结果返回给客户端。

rpc流程:监听并接受客户端的连接请求。 解析客户端发送的请求,确定需要执行的远程方法。 执行相应的远程方法或过程。 将执行结果返回给客户端。

Stub(存根):客户端和服务端之间的代理,用于封装和传输数据。

在 Go 中,存根通常是通过创建一个实现了特定接口的结构体来实现的。这个结构体将接口的方法进行实现

传输协议:定义客户端和服务端之间通信的规则和方式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么事RPC?
  • Stub(存根):客户端和服务端之间的代理,用于封装和传输数据。
  • 传输协议:定义客户端和服务端之间通信的规则和方式。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档