当前位置: 首页 > 软件库 > 程序开发 > 微服务框架 >

GMS

基于 gnet 的微服务框架
授权协议 未知
开发语言 Google Go
所属分类 程序开发、 微服务框架
软件类型 开源软件
地区 不详
投 递 者 商佑运
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

GMS

今天是2020年10月24日,一年一度的程序员节,把这个还在开发中的项目开源出来,感兴趣的朋友可以一起参与开发。如果有大神路过请多指教。

GMS 是一款基于 gnet 网络框架开发的 Golang RPC 微服务框架。

特点:

1:非常简单、学习成本极低。GMS处于初期阶段您想参与开发也非常简单。

只要您之前使用过类似Gin、beego这样的web框架。就能快速上手,使用方法和这些web框架一样简单。

2: 不用定义proto等协议文件。

写proto文件不仅麻烦还容易出错。而且使用协议文件定义服务,最终在框架内部实现都要使用反射去调用目标方法。用反射调用方法比直接调用肯定性能要好。所以如果其他条件不变的情况,用GMS这种实现方式性能肯定是最好的。

缺点:

1:目前很多功能还没有完善,不建议应用在公司项目中。

快速开始

下载源码 进入 example 直接运行。或者按照以下步骤自己搭建Demo运行

下面我们以一个加法计算服务为类

1:定义请求和返回对象

package modeltype AdditionReq struct {
  NumberA int
  NumberB int
}
​
type AdditionRes struct {
  Result int
}

2:开发服务端

package mainimport (
  "github.com/akkagao/gms""github.com/akkagao/gms/gmsContext""example/model"
)
​
func main() {
  // 初始化GMS服务
  gms := gms.NewGms()
​
  // 添加业务处理路由(addition是业务处理方法的唯一标识,客户端调用需要使用)
  gms.AddRouter("addition", Addition)
​
  // 启动,以1024 为启动端口
  gms.Run(1024)
}
​
/*
加法计算
*/
func Addition(c *gmsContext.Context) error {
  additionReq := &model.AdditionReq{}
  // 绑定请求参数
  c.Param(additionReq)
​
  // 结果对象
  additionRes := &model.AdditionRes{}
  additionRes.Result = additionReq.NumberA + additionReq.NumberB// 返回结果
  c.Result(additionRes)
  return nil
}
​

3:开发客户端

package mainimport (
  "fmt""github.com/akkagao/gms/client"
  "github.com/akkagao/gms/codec"
  "github.com/akkagao/gms/discovery""example/model"
)
​
/*
  模拟客户端
*/
func main() {
  // 初始化一个点对点服务发现对象
  discovery := discovery.NewP2PDiscovery("127.0.0.1:1024")
​
  // 初始化一个客户端对象
  additionClient, err := client.NewClient(discovery)
  if err != nil {
    fmt.Println(err)
    return
  }
​
  // 设置 Msgpack 序列化器,默认也是 Msgpack
  additionClient.SetCodecType(codec.Msgpack)
​
  // 请求对象
  req := &model.AdditionReq{NumberA: 10, NumberB: 20}
  // 接收返回值的对象
  res := &model.AdditionRes{}
​
  // 调用服务
  err = additionClient.Call("addition", req, res)
  if err != nil {
    fmt.Println(err)
  }
  fmt.Println(fmt.Sprintf("%d+%d=%d", req.NumberA, req.NumberB, res.Result))
}
​

待开发功能

  • v0.1.1 服务端支持 客户端指定序列化方式
  • v0.1.2 注册中心
  • 流控
  • 熔断
  • 监控统计
  • 目录 如何获取GMS授权 国内的智能手机为什么没有预装GMS 如何预装GMS 请尊重原创版权,转载注明出处。 GMS是Google针对移动终端提供的一系列服务,主要是面向于Android设备,不同于AOSP(Android Open Source Project),GMS需要Google的授权才能使用。本文从以下问题来探讨GMS: 如何获取GMS授权? 为什么国内手机没有预装GMS? 如何预装GM

  • 名词 全称 说明 GMS 全称为Google Mobile Service 即谷歌移动服务。 CTS  全称为Compatibility Test Suite 意思就是兼容性测试,用于测试App和framework的兼容性。 CTS Verifier 兼容性确认测试。 CTS的补充,需要手动验证;主要用于测试那些自动测试系统无法测试的功能,比如相机、传感器等。 GTS  全称是Google Mob

  • GMS (谷歌移动服务)   GMS全称为GoogleMobile Service,即谷歌移动服务。GMS是Google开发并推动Android的动力,是谷歌程序运行的基础。 为谷歌play所应用的底层框架 基本介绍  GMS提供有GooglePlay、Search、Search by Voice、Gmail、Contact Sync、Calendar Sync、Talk、Maps、Street

  • GMS笔记 GMS(Google Mobile Services)简介 什么是谷歌GMS认证? GMS服务,Google Mobile Service(谷歌移动服务),GMS是谷歌应用集合包,以支持设备的功能。 Google Search 、Google Chrome、YouTube 、Google Play Store 等应用。这些应用完美协作,以确 保设备提供良好的用户体现。 什么是GMS授权

 相关资料
  • 本文向大家介绍微服务哪些框架相关面试题,主要包含被问及微服务哪些框架时的应答技巧和注意事项,需要的朋友参考一下 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm 捐赠给 Apache 并加入 Apache 基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一

  • gnet 是一个基于事件驱动的高性能和轻量级网络框架。它直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:netty 和 libuv。 这个项目存在的价值是提供一个在网络包处理方面能和 Redis、Haproxy 这两个项目具有相近性能的 Go 语言网络服务器框架。 gnet 的亮点在于它是一个高性能、轻量级、

  • 我一直在读关于微服务和事件来源的文章,以及它是如何将服务从另一个服务中分离出来的。有两个概念我不清楚。首先,如果在微服务体系结构中,每个服务都可以独立开发,我们如何解释服务间的通信依赖? 例如,如果服务A和服务B需要通信,那么A需要将一个事件发送到一个中央总线,而B需要监听该事件并根据该事件采取行动,但这似乎会产生很多依赖关系。现在,如果我正在开发服务B,我需要知道服务A可以生成的所有事件。此外,

  • ketchup 是一个基于 dotnet core 的微服务框架。网关:兼容 kong,rpc:grpc支持远程调用。

  • Adnc 是一个轻量级的 .Net Core 微服务开发框架,同时也适用于单体架构系统的开发。支持经典三层与DDD架构开发模式、集成了一系列主流稳定的微服务配套技术栈。

  • Seata 的事务上下文由 RootContext 来管理。 应用开启一个全局事务后,RootContext 会自动绑定该事务的 XID,事务结束(提交或回滚完成),RootContext 会自动解绑 XID。 // 绑定 XID RootContext.bind(xid); // 解绑 XID String xid = RootContext.unbind(); 应用可以通过 RootCon

  • 我的设备有一个前台服务,需要全天候工作。有时当gms更新发生时,它会杀死所有的gms服务 我的服务也使用gms(firbase AuthService),所以它也会被杀死 如何停止更新我的服务时,其他gms服务得到更新。我需要防止我的服务不能再次启动,而gms更新。 这里有一些日志:-- ActivityManager:调度重启崩溃的服务com.google.android.gms/.chimer

  • 我在 PLay 2 中将我的应用程序划分为不同的项目。但我刚刚意识到我不知道如何在同一台服务器中运行多个播放应用程序。 有人知道怎么做吗? 让我们假设这是不可能的,因此,我将在同一个根项目中部署多个播放应用程序(微服务将充当插件)。你认为这会打败微服务架构吗?。我会让每个模块独立行动。