IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> go-microservice-simple(1) RPC -> 正文阅读

[网络协议]go-microservice-simple(1) RPC

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/tree/master/chapter1-client
https://gitee.com/alifeidao/go-mircroservice-simple/tree/master/chapter1-server

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:22:00  更:2022-02-04 11:22:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:42:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码