go-microservice-simple(1) RPC

go-microservice-simple(1) RPC,第1张

1 RPC 简介

RPC(Remote Rrocedure Call),远程过程调用

RPC是一个通信协议,为通信程序之间携带信息数据。RPC是分布式系统中不同节点之间流行的通信方式

RPC采用C/S模式,请求程序就是一个客户机,而服务提供程序就是一个服务器。
Server:在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息。
Client:客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息,获得进程结果。

2 Go RPC

下面介绍go-RPC。官方的net/rpc库实现的RPC方法
统一协议为tcp,本机启动两个程序,实现server端返回hello world字符串:
1 client
2 server(端口为8086)
主要通信参数:

tcpStr := "tcp"
serverUrl := "127.0.0.1:8086"
2.1 RPC Server

首先定义接口数据struct:

type Response struct {
	Data []byte
}

定义接口struct(函数):

type LhServer struct {

}

func (s *LhServer) Rec(nul *struct{}, res *Response)  error{
	*res = Response{Data: []byte("hello world!")}
	return nil
}

这里的Rec就是serviceMethod函数,返回hello world字符串。

第1步:rpc注册接口struct(函数):

	err:=rpc.Register(new(server.LhServer))
	if err!=nil{
		fmt.Println("register publisher failed :",err.Error())
	}else{
		fmt.Println("register publisher sucessed:")
	}

第2步: 启动server listen连接:

	listenCon,err:=net.Listen(tcpStr,serverUrl)
	if err!=nil{
		fmt.Println("listern tcp failed:",err.Error())
	}else{
		fmt.Println("listern tcp sucessed:", serverUrl)
	}
	defer listenCon.Close()

第3步:启动rpc server listen连接:

	rpc.Accept(listenCon)
	fmt.Println("rpc accept listern:")

启动函数,运行结果如下:

2.2 RPC Client

首先定义接口数据struct:

type Response struct {
	Data []byte
}

定义接口函数的字符串:

serviceMethod:="LhServer.Rec"

注意:接口数据struct、接口函数的字符串和server端一定要一致。

第1步: 建立服务器端的连接:

	clientCon, err := rpc.Dial(tcpStr, serverUrl)
	if err != nil {
		fmt.Println("dial failed..", err.Error())
	}else{
		fmt.Println("dial successed..", serverUrl)
	}

第2步:调用服务器端的接口struct(函数):

	var res client.Response
	err = clientCon.Call(serviceMethod, &struct{}{}, &res)
	if err != nil {
		fmt.Println("failed to Call..", err.Error())
	}else{
		resStr := string(res.Data)
		fmt.Println("rpc调用结果:", resStr)
	}
	clientCon.Close()

启动函数,运行结果如下:

代码详见:
https://gitee.com/alifeidao/go-mircroservice-simple
chapter1-client
chapter1-server

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/995380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存