通讯枢纽组件.设计

需求

聊天服务器、webrtc、游戏服务器等都需要一个节点来作为主节点来维护服务的状态,该主节点上运行这不同于其他节点的程序,每次开发新应用都需要写一套新的程序用于新应用的主节点
打算写个通用而简单的通讯枢纽组件来应对这一需求

技术选用

go运行内存占用极低,使用简单,易于上云,索性用go
websocket夸平台,能用于h5

概念

Room(房间)

跟游戏重的房间差不多,只有在同一房间里才能相互通讯

User(用户)

客户端携带有效验证信息才能与通讯枢纽组件通讯,在通讯组件中生成有唯一标识

Sytem(系统)

主节点没有用户,虚拟一个特殊用户:系统

Message(消息)

数据结构
:::info
type Message struct {
Room int64
FromGroup int64 // 来自哪个组
FromUser int64 // 来自哪个用户
ToUser int64 // 发送给哪个用户
ToGroup int64 // 发送给哪个用户
Content string
CmdResult *GeneralCmdResult
}
:::

Group(组)和Rule(规则) !关键!

组包含多个用户,规则定义了组与组之间能否通讯
特殊组
ID=1,默认组,房间里的所有人都在这个组中
ID=2,表示系统,虚拟的组
ID=3,表示用户,虚拟的组
规则类型与iptables中的规则链,依据FromGroup、ToGroup来寻找第一条符合的规则
特殊规则
当ToGroup=2,为系统命令(参见 系统命令),不会转发这种消息,不受Rule的影响
当ToGroup=3,发送给单个用户,需要指定ToUser
对于除了ToGroup=2之外的消息,系统会验证FromGroup,ToGroup是否合理,再转发给Group中所有用户

Auth鉴权服务

每个来自客户端的新连接需要携带验证信息,System会将这些信息发送给指定鉴权服务来获取用户信息,依据这些信息为用户生成唯一标识

系统命令

// 特殊指令 client -> server
// rooms
// ls-room   offset limit           : list rooms
// build-room   -public=true -password=123 -desc= roomName    example:   build-room -public=true -password=1234 -desc=222 room1
// del-room     roomId
// // transfer    userId
//
// room roomId     : list users and groups and rules
// kick roomId userid
// join roomId password
// quit roomId      : quit room
// build-group roomId -groupId=userId1,userId2 ...    build-group  -6=1,2 -7=2 7092241525490286622
// build-rule roomId -1=1,2,3,-2,-4                   build-rule  -1=6,-7 -2=7,-6,0 7092241525490286622  // -2中有0标识reject,
//
// 响应  server -> client
// user-rooms    -single
// user-down     -all
// user-up       -all
// user-join     -all
// user-leave    -all
// user-kicked   -all
// room   refresh room info
// room-deleted  -all
// rooms         -single
// others are message

改进

  • 全是内存数据,考虑改用redis或dynamoDB
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值