使用 gRPC

        在过去的十年中,REST API 已成为应用程序和系统之间通信的标准选项。然而,2015年,Google 推出了现代开源远程过程调用 gRPC 的概念,它提供了与 REST API 相同的功能,且具有更快、更轻量级和更灵活的服务和通信。因此,现在大多数编程语言都支持 Google Remote Procedure Call(gRPC)。

1. 使用 gRPC

        简单地说,gRPC 是一个现代、开源的远程过程调用(RPC)框架,可以在任何地方运行。RPC 是应用程序中的一种函数,可以通过另一个应用程序远程执行。它在分布式系统中尤其常见,其中一台计算机想要调用分布式系统中另一台机器上的方法或函数。

        gRPC 与 REST API 类似,都是将托管在服务器上的服务暴露给客户端。

gRPC 和 REST 之间存在一些差异。

  • gRPC 使用 HTTP/2,而 REST 使用 HTTP 1.1。这使得 gRPC 能够利用 HTTP/2 的特性,如服务器端和客户端的流式传输。
  • gRPC 使用 Protocol Buffers(Protobuf) 数据格式,而 REST 使用 JSON。
  • 在传统的 REST API 设置中,客户端使用标准的 HTTP 请求(GET、POST、PUT和DELETE) 与服务器通信,而 gRPC 通过 Protobuf 使用一种更抽象的层次来允许更灵活地通信。

        为更详细地说明这些概念,下面将使用 gRPC 实现一个聊天服务。具体来说,将创建一个 gRPC 服务器和客户端,并使用 Protobuf 来创建双方之间的聊天服务。

2. 设置服务

        我们需要额外的服务,这些服务未包含在典型的 Go 安装中。我们需要下载和安装以下应用程序以及创建一个用户目录。 

  • Git
  • gRPC
  • Protobuf
  • protoc
        2.1  Git

        Git 是一个分布式版本控制工具。要在命令行提示符中验证是否已在计算机上安装了 Git,可输入以下命令。

[root@localhost ~]# git --version

        如果系统已经安装了 Git,则此命令将返回当前版本。如果系统尚未安装 Git,可通过 Git 的下载页面 https://git-scm.com/downloads 获取下载和安装说明。 

2.2 gRPC

        我们还需要在系统上安装 gRPC。可以使用以下命令行安装 gRPC 服务。

 [root@localhost ~]# go get -u google.golang.org/grpc

        如果安装成功,当运行此命令时,不会在命令提示符中看到任何内容。

2.3 Protobuf

        Protobuf 是一种由 Google 开发 的开源跨平台机制,用于将结构化数据进行序列化。可以将 Protobuf 视为 XML 的更轻量级和更快版本。与 XML 一样,我们可以决定数据的结构(使用 proto 文件),然后使用 Protobuf 将结构化数据读写到各种流中。通常,Protobuf 被程序用于存储数据与其他应用程序通信。

        可使用以下命令安装 Go 的协议编译器插件(protoc-gen-go)。

[root@localhost ~]# go get github.com/golang/protobuf/protoc-gen-go

        这个 go get 指令将下载并保存文件到计算机上的新目录。如果使用的是 macOS 或 Linux,则可以输入以下命令设置路径,以便插件可以找到代码文件。

[root@localhost ~]# export PATH="$PATH:$(go env GOPATH)/bin"
2.4 protoc

        安装协议缓冲区编译器(protoc),需要使用版本 3 或以下版本。

  • 详细的安装说明可在 Protobuf 的 GitHub 存储库中找到,网址为 https://github.com/protocolbuffers/protobuf。还可以在该页面上找到适用于 macOS 和 Linux 的终端命令。
  • 对于 Windows 用户或者对终端命令有疑问者,可从 Protobuf 存储库的 Releases 文件夹中下载适用于你系统的二进制文件。

        下载文件后,打开压缩文件夹,将 bin 和 include 子目录复制到你的 user/Go 文件夹中。这将向你的 Go 安装中添加 protoc。你将在 Go 中看到一个现有的 bin 子目录;将新版本粘贴到相同的位置。如果需要,可以对这些文件夹进行合并。

2.5 用户目录

        所有程序文件应保存到通过下载文件创建的 usr/Go/src 位置。

  • 在 Linux 或 macOS 上,可能的位置是/usr/local/go/src。
  • 在 Windows 上,位置为 C:\Users\%USERNAME%\Go\src。

请确认此文件夹是否在你的计算机上。另外还要检查 bin  子目录是否包括以下两个文件。

  • protoc.exe
  • protoc-gen-go.exe

3. 创建服务器

                一旦设置好一切,并确认用户目录已创建且包含适当的文件,就可以继续后续工作。在第一步中,将使用 net 包创建一个简单的服务器,该服务器将在端口 10000 上监听 TCP 连接。这是服务器的最基本版本。

        创建一个名为 server.go 的新文件并将其保存到 src 文件夹中。代码如下所示: 

package mainimport ("fmt""log""net"
)func main() {listener, err := net.Listen("tcp", ":10000")fmt.Println(listener)if err != nil {log.Fatalf("failed to listen: %v", err)}
}

 此时代码并没有做太多事情。它使用 net.Listen 函数在本地网络地址上监听。 net.Listen 的第一个输入是网络类型,第二个参数是端口或地址,在本例中为 10000。注意,网络类型必须是以下值之一。

  • tcp
  • tcp4
  • tcp6
  • unix
  • unixpacket

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一…

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP 我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。 在互…

yolo算法小结

文章目录 yolov1工作原理限制 yolov2网络结构改进点 yolov3改进点 yolov4网络结构图改进点 yolov5改进点 参考资料 YOLO的核心思想是将物体检测视为一个回归问题,它不采用传统的区域提议方法,而是通过单一的神经网络对整个图像进行预测。这意味着YOLO只需…

C/C++两点坐标求距离以及C++保留两位小数输出,秒了

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 3. 备注 1. 前言 依旧是带来一个练手的题目,目的就一个,方法千千万,通向终点的方式有很多种,没有谁与谁,我们都是为了成为更好的自己。…

使用亚马逊Bedrock的Stable Diffusion XL模型实现文本到图像生成:探索AI的无限创意

引言 什么是Amazon Bedrock? Amazon Bedrock是亚马逊云服务(AWS)推出的一项旗舰服务,旨在推动生成式人工智能(AI)在各行业的广泛应用。它的核心功能是提供由顶尖AI公司(如AI21 Labs、Anthropic…

python中的循环结构

注意:range()函数 累加和: 注意:if 下面如果有好几行,只执行一行 print必须和 for 开头相同格数 例题:水仙花数 注意在print语句中,一句好“ 。。。。。 ”后面必须有逗号然后再写变…

C++(一)----C++基础

1.C的发展史 C语言诞生后,很快普及使用,但是随着编程规模增大且越来越复杂,并且需要高度的抽象和建模时,C语言的诸多短板便表现了出来,为了解决软件危机,上世纪八十年代,计算机界提出了oop&…

linux top命令介绍以及使用

文章目录 介绍 top 命令1. top 的基本功能2. 如何启动 top3. top 的输出解释系统概况任务和 CPU 使用情况内存和交换空间进程信息 4. 常用操作 总结查看逻辑CPU的个数查看系统运行时间 介绍 top 命令 top 是一个在类 Unix 系统中广泛使用的命令行工具,用于实时显示…

WebGL系列教程二(环境搭建及初始化Shader)

目录 1 前言2 新建html页面3 着色器介绍3.1 顶点着色器、片元着色器与光栅化的概念3.2 声明顶点着色器3.3 声明片元着色器 4 坐标系(右手系)介绍5 着色器初始化5.1 给一个画布canvas5.2 获取WebGL对象5.3 创建着色器对象5.4 获取着色器对象的源5.5 绑定着色器的源5.6 编译着色器…

ChatGPT 3.5/4.0使用手册:解锁人工智能的无限潜能

1. 引言 在人工智能的浪潮中,ChatGPT以其卓越的语言理解和生成能力,成为了一个革命性的工具。它不仅仅是一个聊天机器人,更是一个能够协助我们日常工作、学习和创造的智能伙伴。随着ChatGPT 3.5和4.0版本的推出,其功能和应用范围…

windows电脑自动倒计时关机

今天聊一聊其他的。我时不时的有一个需求,是关于在windows电脑上定时关机。 不知道怎么地,我好几次都忘了这个自动定时关机的终端命令,于是每一次都要去网上查。 1.鼠标右击【开始菜单】选择【运行】或在键盘上按【 WinR】快捷键打开运行窗口…

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲…

网络学习-eNSP配置VRRP

虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP) VRRP广泛应用在边缘网络中,是一种路由冗余协议,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及即使在实际…

模版的价值工程

我们在做什么 工作吗 最终不过是在做模版工程模版,最终会进化 沦为后世的参考文档。仅此而已! 或者已经沦为了文档类别 其他📄 最终我们会选择EXIT 指令 尽快它是 window桌面 我们只是图像 人字🌟的🦣 😱…

leveldb源码剖析(二)——LSM Tree

LSM Tree LSM Tree:Log-Structured Merge Tree,日志结构合并树。是一种频繁写性能很高的数据结构。 LSM Tree将写入操作与合并操作分离,数据首先写入磁盘中的日志文件(WAL),随后写入内存缓存,…

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个…

Matlab simulink建模与仿真 第十一章(端口及子系统库)【上】

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、端口及子系统库中的模块概览 注:In模块、Out模块和Subsystem模块在第二章中均有介绍,本章不再赘述;Subsystem Examples子系统实例模块也不进行介绍。 二、使能及其子模…

camtasia2024破解版本安装包网盘下载 附带永久激活码秘钥

Camtasia 2024 🌟 新功能大揭秘,让你轻松成为视频制作达人! 嘿,亲爱的小红薯们!👋 今天我要给大家介绍一款超实用的视频编辑软件——Camtasia 2024。这款软件可是让我的视频制作技能瞬间提升了不止一个档次…

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一,单位冲激响应 二,LTI系统对任意序列的系统响应 三,LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习,我已经知道了离散时间线性时不变系统(LTI&#x…

Linux系统本地化部署Dify并安装Ollama运行llava大语言模型详细教程

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…