首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探索 Nano 分布式(集群)示例(Distributed Chat)

探索 Nano 分布式(集群)示例(Distributed Chat)

作者头像
为少
发布2021-05-27 19:06:26
5720
发布2021-05-27 19:06:26
举报
文章被收录于专栏:黑客下午茶黑客下午茶

示例仓库

笔者改过的官方示例:distributed-chat

  • https://github.com/Hacker-Linner/cloud-native-game-server/tree/master/demo/3-distributed-chat

探索

我们进入 3-distributed-chat

启动主服务器

用来管理或者调度集群中的其他服务器。

首先编译一下:

go build -o distributed

然后:

# 它的监听地址是 127.0.0.1:34567,同时也是 gRPC 服务器地址
# 它对外提供了两个服务:
# TopicService.NewUser ->> 处理来自网关的新用户请求的公共逻辑等
# TopicService.Stats ->> 集群机器服务调用统计等等
# 说白了就是 Component 里面的两个 hanlder
./distributed master --listen "127.0.0.1:34567"

启动聊天服务器并让它加入到 cluster

真正的游戏业务逻辑服务

# --master 127.0.0.1:34567 远程主服务器地址
# 它的监听地址是 127.0.0.1:34580,同时也是 gRPC 服务器地址
# 它对外提供了两个服务:
# RoomService.JoinRoom ->> 将客户端的 session 加入 Group 统一管理
# RoomService.SyncMessage ->> 广播消息,就是调用 Group 管理的 session,写信息到它们给自的 websocket 连接
./distributed chat --master "127.0.0.1:34567" --listen "127.0.0.1:34580"

启动网关服务器并让它加入到 cluster

客户端真正要连接的入口地址:

# -gate-address "127.0.0.1:34590" 这个就是客户端 websocket 连接要连接的地址
# 它的监听地址是 127.0.0.1:34570,同时也是 gRPC 服务器地址
# 它对外提供了两个服务:
# BindService.Login # 鉴权方面到处理
# BindService.BindChatServer # 直接绑定到具体到聊天服务器
./distributed gate --master "127.0.0.1:34567" --listen "127.0.0.1:34570" --gate-address "127.0.0.1:34590"

远程服务 Remote Service

集群上的每台服务器,通过 Master 节点注册后,都会把除自己以外的集群中其它节点提供的服务注册为自己的 Remote Service。

所以当我们客户端调用 starx.notify('RoomService.SyncMessage'...,其实网关服务器会调用它的 Remote Service,最终会转到 Chat Server 节点。

具体流程

http://127.0.0.1:12345/web/

用户加入房间:BindService.Login(Gate Server) -> TopicService.NewUser(Master Server) -> RoomService.JoinRoom(Chat Server)

用户发送消息:Gate Server -> RoomService.SyncMessage(Chat Server)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例仓库
  • 启动主服务器
  • 启动聊天服务器并让它加入到 cluster
  • 启动网关服务器并让它加入到 cluster
  • 远程服务 Remote Service
  • 具体流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档