GO EASY 游戏框架 之 GRPC 扩展篇 04
1 Overview
此章节是对第三章的一个补充。同样属于RPC的篇章。是专门为了类似游戏服务这种需要指定RPC服务端具体地址,也就是具体是哪台机器的某应用进程,通信的方式。笔者简单的封装了下保证基本的服务稳定,且具备服务发现的属性即可,因此也仅仅对GRPC的客户端进行一次壳子的封装。
2 客户端初始化
外表看着几乎与03章节的 客户端初始化代码基本一致;
GRPC的初始化类名不同变为了NewGameGrpcCluster 而已;
这里没表现出来的,就是绑定Proto接口的方式发生了变化;
etcd.NewWithOption(option.OptionWith(nil).Default(option.OptionFunc(func() (string, any) {return "Endpoints", strings.Split(etcdAddr, ";")}),))client := cgrpc.NewGameGrpcCluster(option.OptionWith(&struct {PathName stringNamespace string}{"server1", namespace}))//client.Start()// do your thingstestHandle(client)// just for testclient.Wait()// closeclient.Close()
3 调用Proto服务接口
为了方便后续调用,以及简化代码,我们在使用grpc.ClientConn 时的部分进行了一个函数封装。这与经常见过GRPC调用的方式是一样的。
func handleSay(clientConn grpc.ClientConnInterface) {c := helloworld.NewGreeterClient(clientConn)resp1, err := c.SayHello(context.Background(),&helloworld.HelloRequest{Name: fmt.Sprintf("xiaoming-%d", 9)},)if err != nil {log.Fatal("Say Hello error:%v", err)return}log.Info("SayHello Response:%s\n ", resp1.Message)}
4 指定GRPC服务的invoke
- 关键点就是一个client.Handle;
- 它的参数是一个匿名函数;
- handle参数匿名函数 传递一个[]*cgrpc.GameGrpcConn的切片;
- cgrpc.GameGrpcConn 是继承于grpc.ClientConn
func testHandle(client *cgrpc.GameRpcCluster) {ticker := time.NewTicker(time.Second)for {<-ticker.Cclient.Handle(func(gconns []*cgrpc.GameGrpcConn) {log.Info("clients conns %v", len(gconns))if len(gconns) == 0 {return}handleSay(gconns[0])})}
}
handle参数匿名函数拿到了grpc链接列表;致于如何获取某一个链接。就是路由的事情了,可以单独做一个小模块,与它结合起来。这里我们暂时没有做。
不过只要知道GameGrpcConn的另外一个参数你就很容易策略做这件事了。看看它的定义
type GameGrpcConn struct {*grpc.ClientConnInfo ServInfo
}type ServInfo struct {AddrToRpc stringAddrToClient stringName stringdata any
}
知道了链接地址,和名字,怎么选择,可以随意开发策略,是随机,是按地址选择,按服务名选择也好。
需要知道用户在哪台游戏服的,或哪台聊天服的业务场景中,可以轻松实现。
相关文章:
GO EASY 游戏框架 之 GRPC 扩展篇 04
1 Overview 此章节是对第三章的一个补充。同样属于RPC的篇章。是专门为了类似游戏服务这种需要指定RPC服务端具体地址,也就是具体是哪台机器的某应用进程,通信的方式。笔者简单的封装了下保证基本的服务稳定,且具备服务发现的属性即可&#…...
【JavaScript】JavaScript中的GC算法
1、内存管理 内存:由可读写单元组成,标识一片可操作的空间 管理: 认为的去操作一篇空间的申请、使用和释放 内存管理:开发者主动申请空间、使用空间、释放空间 管理流程: 申请-使用-释放 // 申请 let obj {} //使…...
从互联网到云计算再到 AI 原生,百度智能云数据库的演进
1 数据库行业发展概述 如果说今年科技圈什么最火,我估计大家会毫不犹豫选择 ChatGPT。ChatGPT 是 2022 年 11 月 30 日由 OpenAI 发布的聊天应用。它创造了有史以来用户增长最快的纪录:自 11 月 30 日发布起,5 天就拥有了 100 万活跃用户…...
C# | CountdownEvent使用教程 (通过与ManualResetEvent对比,快速了解其特性)
C# CountdownEvent使用教程 对于熟悉ManualResetEvent的同学来说,了解CountdownEvent的差异对于更好地利用它们是非常重要的。通过对ManualResetEvent和CountdownEvent的对比,我们可以更好地理解CountdownEvent的特点和使用场景。 ManualResetEvent回顾…...
2、LLVM 函数名称加密 及3种PASS的实现
sudo usermod -a -G vboxsf nowind nowind是你的虚拟机登录的用户名解决virtualbox 虚拟机共享文件夹不能使用的问题 第一种:源码内实现pass: 实现EncodeFunctionName 的pass,核心代码如下 相关文件的修改: 因为后面同样用到…...
Python网络爬虫的基础理解-对应的自我理解误区
##通过一个中国大学大学排名爬虫的示例进行基础性理解 以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:(1)按照排名先后顺序输出不同年份的前10…...
基于ssm的家庭财务管理系统设计与实现论文
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本家庭财务管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...
前端知识(八)———前端需要掌握的技术有哪些方面
前端开发需要掌握的技术包括以下几个方面: 1.HTML:HTML是网页的基础骨架,是网页内容的载体,负责网页内容的排列和布局。 2.CSS:CSS是网页的样式表,负责网页的外观和样式。 一般情况下HTMLCSS是在一起使用…...
【九】spring、springmvc、springboot、springcloud
spring、springmvc 、springboot 、springcloud 简介 从事IT这么些年,经历了行业技术的更迭,各行各业都会有事务更新,IT行业技术更迭速度快的特点尤为突出,或许这也是从事这个行业的压力所在,但另一方面反应了这个行业…...
Core Web Vitals 是排名因素吗?
Core Web Vitals 会影响您的自然搜索排名吗?在本文中,我们将研究索赔、证据和判决。 Core Web Vitals 衡量页面体验信号,以确保为搜索用户提供引人入胜的用户体验。 但是 Core Web Vitals 会影响您的自然搜索排名吗? 声明&…...
“蒙企通”线上平台升级 助力内蒙古自治区民营经济发展
为进一步落实《中共中央、国务院关于促进民营经济发展壮大的意见》和内蒙古自治区党委、政府《关于进一步支持民营经济高质量发展的若干措施》,内蒙古自治区发展改革委联合自治区工商联共同开展“自治区促进民营经济发展项目”,为民营经营主体拓展市场、…...
电商早报 | 12月13日| 2023胡润男企业家榜发布:黄铮位于第三
2023胡润男企业家榜发布:拼多多创始人跻身前三 12月12日消息,胡润研究院发布《2023胡润男企业家榜》,列出了胡润百富榜中前50名中国男性企业家,总财富6.37万亿元,上榜门槛640亿元。 这是胡润研究院首次发布“男企业家…...
Terraform实战(二)-terraform创建阿里云资源
1 初始化环境 1.1 创建初始文件夹 $ cd /data $ mkdir terraform $ mkdir aliyun terraform作为terraform的配置文件夹,内部的每一个.tf,.tfvars文件都会被加载。 1.2 配置provider 创建providers.tf文件,配置provider依赖。 provider…...
ELADMIN - 免费开源 admin 后台管理系统,基于 Spring Boot 和 Vue ,包含前端和后端源码
一款简单好用、功能强大的 admin 管理系统,包含前端和后端源码,分享给大家。 ELADMIN 是一款基于 Spring Boot、Jpa 或 Mybatis-Plus、 Spring Security、Redis、Vue 的前后端分离的后台管理系统。 ELADMIN 的作者在 Github 和 Gitee 上看了很多的项目&…...
Centos安装docker显示 No Package Docker-Ce Available
安装docker 查看当前系统内核 查看方式 uname -r显示如下 [root@test ~]# uname -r 3.10.0-1127.19.1.el7.x86_64重要提示: docker内核版本必须是3.10+以上的版本 1、卸载老版本的 docker 及其相关依赖 yum remove docker docker-common container-selinux docker-selin…...
如何使用玻璃材质制作3D钻石模型
在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格…...
工具:Jupyter
Jupyter是一个开源的交互式计算环境,由Fernando Perez和Brian Granger于2014年创立。它提供了一种方便的方式来展示、共享和探索数据,并且可以与多种编程语言和数据格式进行交互。Jupyter的历史可以追溯到2001年,当时Fernando Perez正在使用P…...
即时通讯技术文集(第27期):实时音视频技术合集(Part2) [共17篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第27 期。 [- 1 -] 专访微信视频技术负责人:微信实时视频聊天技术的演进 [链接] http://www.52im.net/thread-1201-1-1.html [摘要] 本次专访…...
synchronized关键字的使用和原理
synchronized关键字的使用和原理 synchronized:对象锁,保证了临界区内代码的原子性,采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其它线程获取这个对象锁时会阻塞,保证拥有锁的线程可以安全的执行临界区内…...
【PHP】php发送邮箱验证码格式美化,样式美化
效果展示: 格式美化前 格式美化后 代码 大多数框架都自带有封装好的发送email方法,就不多赘述,主要写格式: <? php// 验证码过期时间 $expire 120; // 发件人邮箱 $from_email xx163.com; // 收件人 $to_email to163.com…...
统一去马赛克与降噪技术:ESUM模型解析与应用
1. 项目概述:统一去马赛克与降噪技术研究 在数字图像处理领域,去马赛克(Demosaicing)是图像信号处理(ISP)流水线中最关键的步骤之一。这项技术负责将传感器捕获的原始拜耳模式(Bayer Pattern&am…...
Julia 中的 One Billion Row Challenge
原文:towardsdatascience.com/the-one-billion-row-challenge-in-julia-bdd19cde58d5?sourcecollection_archive---------9-----------------------#2024-06-05 如果数据科学家决定接受这个任务,他们能学到什么? https://medium.com/vikas.…...
Arcgis新手必看:用‘焦点统计’和‘设为空函数’搞定栅格数据清洗(附避坑要点)
ArcGIS栅格数据清洗实战:焦点统计与设为空函数的高效应用指南 当你第一次拿到一份满是噪点的DEM数据或存在异常值的土地利用分类图时,那种手足无措的感觉我深有体会。栅格数据清洗是GIS分析中看似简单却暗藏玄机的关键步骤,一个不当的参数设置…...
Go 入门 08:goroutine 与 channel
Go 入门 08:goroutine 与 channel 并发是 Go 的招牌特性。Rob Pike 提出 “Don’t communicate by sharing memory; share memory by communicating”——不要通过共享内存来通信,而要通过通信来共享内存。这正是 goroutine channel 的核心哲学。 一、g…...
别再只盯着RMSE了!MATLAB里这7个模型评价指标,你用对了吗?
别再只盯着RMSE了!MATLAB里这7个模型评价指标,你用对了吗? 在数据建模的世界里,我们常常陷入一个误区:用单一指标评判模型的优劣。就像用一把尺子测量所有物体,RMSE(均方根误差)固然…...
技术博主都在悄悄用的Perplexity高级搜索语法,11个未公开符号组合全曝光
更多请点击: https://kaifayun.com 第一章:Perplexity高级搜索语法的底层逻辑与设计哲学 Perplexity 的高级搜索语法并非简单的关键词匹配扩展,而是基于语义意图建模与查询图谱重构的设计实践。其核心在于将用户自然语言查询实时编译为可执行…...
告别混乱文件管理:用FileMeta解锁Windows隐藏的元数据超能力
告别混乱文件管理:用FileMeta解锁Windows隐藏的元数据超能力 【免费下载链接】FileMeta Enable Explorer in Vista, Windows 7 and later to see, edit and search on tags and other metadata for any file type 项目地址: https://gitcode.com/gh_mirrors/fi/Fi…...
如何实现Galgame与漫画的实时多语言翻译?MisakaTranslator技术解析
如何实现Galgame与漫画的实时多语言翻译?MisakaTranslator技术解析 【免费下载链接】MisakaTranslator 御坂翻译器—Galgame/文字游戏/漫画多语种实时机翻工具 项目地址: https://gitcode.com/gh_mirrors/mi/MisakaTranslator 御坂翻译器(MisakaT…...
深度学习CNN(一)—— 卷积运算的本质(三十八)
1. 定位导航 🎉 第 9 章 CNN 大门正式开启! CNN 是深度学习历史上最具影响力的架构创新之一: 2012 AlexNet:ImageNet 革命,开启深度学习时代 2015 ResNet:突破"深度极限" 2020 Vision Transformer:CNN 的最大竞争对手出现 直到 2024 年:CNN 仍是图像处理、…...
Centos9安装MySQL8.0数据库
1.这次使用rpm包进行安装MySQL数据库首先下在包,我这里是使用wget进行下载的,这里是下载地址。下载好后使用ls看看rpm包是不是6个,如果不是需要重新下载。2.安装相关软件yum install -y net-tools.x86_64 libaio.x86_64 perl.x86_6…...
