学习笔记: 我家别墅靠大海/pitaya-learn

尝试集成功能:我家别墅靠大海/pitaya-game

如果你正在看此笔记,请你左边放笔记,右边放chatdemo的代码!!

我是按代码的顺序记的笔记

分析chat demo

main.go ->main 首先他声明了一个config的生成器

conf := configApp()func configApp() *config.BuilderConfig {conf := config.NewDefaultBuilderConfig()conf.Pitaya.Buffer.Handler.LocalProcess = 15conf.Pitaya.Heartbeat.Interval = time.Duration(15 * time.Second)conf.Pitaya.Buffer.Agent.Messages = 32conf.Pitaya.Handler.Messages.Compression = falsereturn conf
}

NewDefaultBuilderConfig提供默认生成器配置

当然也可以不用他默认的

看一下配置描述

https://pitaya.readthedocs.io/en/latest/configuration.html

pitaya.buffer.handler.localprocess 20 int 本地消息处理器缓冲区的大小
pitaya.heartbeat.interval 30s time.Time 心跳间隔
pitaya.buffer.agent.messages 100 int 每个代理缓冲区的大小
pitaya.handler.messages.compression true bool 是否压缩消息

服务生成器

demo创建了一个默认的服务生成器

builder := pitaya.NewDefaultBuilder(true, "chat", pitaya.Cluster, map[string]string{}, *conf)

当然也有不是默认的

看一下默认服务生成器的参数

true 表示是面向客户端的前端服务器

在集群模式下,服务器既可以是前端服务器,也可以是后端服务器。

前端服务器必须指定用于接收传入客户端连接的侦听器。它们能够根据路由逻辑将接收到的消息转发到适当的服务器。

后端服务器不侦听连接,它们只接收 RPC,要么是转发的客户端消息(sys rpc),要么是来自其他服务器(用户 rpc)的 RPC。

官方解释:Features — Pitaya documentation

“chat” 服务器类型

pitaya.Cluster 集群模式,也有单机模式

map[string]string{} 服务器元数据,不清楚什么意思。可能是服务器运行中存在的数据?

*conf 配置生成器的指针

服务接受

builder.AddAcceptor(acceptor.NewWSAcceptor(":3250"))

添加一个接收器,这里要求服务必须是前端服务

(builder时第一个参数是true)

这里的ac参数是接收器实例,实现了Acceptor接口要求的方法,demo里面是 new一个websocket的接受

源码里面有tcp和ws

tcp例

组管理驱动

这里初始化一个内存组驱动

builder.Groups = groups.NewMemoryGroupService(*config.NewDefaultMemoryGroupConfig())

参数是一个内存组的配置

demo用的依旧是默认的配置

pitaya.groups.memory.tickduration 30s time.Duration  自动检查是否应删除组

这里Groups实际上是需要一个接口

可以看到,内部实现了etcd和memory

构建

作者感觉demo配置差不多了

 // 构建火龙果app = builder.Build()// 延迟关闭defer app.Shutdown()

他开始构建了,获得一个火龙果的句柄

这个方法还是挺多的,推荐大家去看看,有点简单的英语基础应该就能看懂50%

创建组

然后他这边创建了一个组

 err := app.GroupCreate(context.Background(), "room")if err != nil {panic(err)}

组名就是room

源码里我们能看到他组里面到底是什么鬼,打开内存组驱动的源码

实际上就是

内存组管理器->管理一堆组->一堆组管理一堆uid

组件

然后紧接着创建一个room组件,这个组件就是聊天室逻辑啦

room := NewRoom(app)Room struct {component.Basetimer *timer.Timerapp   pitaya.Pitaya}// NewRoom returns a Handler Base implementation
func NewRoom(app pitaya.Pitaya) *Room {return &Room{app: app,}
}// AfterInit component lifetime callback
func (r *Room) AfterInit() {r.timer = pitaya.NewTimer(time.Minute, func() {count, err := r.app.GroupCountMembers(context.Background(), "room")logger.Log.Debugf("UserCount: Time=> %s, Count=> %d, Error=> %q", time.Now().String(), count, err)})
}

room 继承了 component.Base ,base默认实现了component的接口,当然可以手写一个覆盖他

这里包含一个组件生命周期调用过程

官方介绍:

可以选择实现以下生命周期方法:

  • Init() - 在初始化应用程序时由 Pitaya 调用
  • AfterInit() - 初始化应用程序后由 Pitaya 调用
  • BeforeShutdown() - 在关闭组件时由 Pitaya 调用,但在调用 shutdown 之前
  • Shutdown() - 关闭开始后由 Pitaya 调用

======

NewRoom 就是单纯的返还一个room组件的实例

但是需要把火龙果的实例保存起来给room组件后续使用

在初始化之后,他创建一个定时器,每分钟打印room组里面有多少人

第一个参数,时间间隔

第二个参数,时间到了的回调

time.Duration必须>0否则会panic

字面意思,就是看看组里多少人。。 GroupCountMembers

绑定组件

绑定组件给火龙果

room 组件实例

component.WithName("room") 组件名称

component.WithNameFunc(strings.ToLower) 组件名称方法

名称方法是操作名字的,参数是string,返还也是string

组件消息处理

功能逻辑代码,其实都差不多,主要了解一下内部方法的调用

首先看一下功能 ,三个

onMembers 房间内的人 s->c 1

onNewUser 新用户 s->c 2

onMessage 有人说话了 s ->c 3

room.join 我进到房间了 c -> s

客户端打开网页以后,调用了room.join.然后传过来一个空的msg[]byte,返还一个joinresponse指针和error

其实这是组件约束的写法

参考Pitaya API — Pitaya documentation

参数

  • context.Context:请求的上下文,其中包含客户端的会话。
  • pointer or []byte:请求。

通知处理程序不返回任何内容,而请求处理程序必须返回:

  • pointer or []byte: 响应
  • error: 一个错误变量

获得session信息(链接信息)根据上下文

s := r.app.GetSessionFromCtx(ctx)

s.id()获得sessionID(链接id)

然后他这边用链接id(sid)绑定了上下文

往当前的链接里面推送room组里面的用户sid

当前玩家刚进来时候能看到全部玩家的id , 不含自己

推送给当前组,有新人加入

ctx 上下文

"chat" 服务器类型

"room" 组名

"onNewUser" 路由名

内容

加入链接至组

当链接关闭时从组内移除

message方法就大同小异了。。。

分析的差不多,感觉可以模仿的写了

学习笔记3

go-pitaya学习笔记(3)-小小的测试_冰纳-CSDN博客

go-pitaya学习笔记(2)-chatDemo分析相关推荐

  1. Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...

    Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4) 今天再次分析了Eva的源码,也看 ...

  2. oracle in查询 一直等待,学习笔记:Oracle awr 分析解决inactive transaction branch等待事件...

    天萃荷净 通过Oracle AWR报告分析inactive transaction branch等待事件的原因 分析一份awr,发现不太熟悉的等待事件"inactive transactio ...

  3. RT-1052学习笔记 - GPIO架构分析

    RT-1052学习笔记 - GPIO架构分析 一.RT1052之GPIO与IOMUX 二.GPIO架构分析 分析GPIO的外设框架 库函数操作 1.初始化MUX 2.初始化PAD 3.初始化GPIO外 ...

  4. ARM学习笔记--LPC1788引脚分析

    http://zgmgypb.blog.163.com/blog/static/962028192012730104640980/ RM学习笔记--LPC1788引脚分析 一.电源分析 要弄清楚单片机 ...

  5. HFSS学习笔记 21 扫频分析

    HFSS学习笔记之扫频分析-----------锋锋的快乐小窝 通过求解设置,可以对模型结构进行自适应网格剖分,并计算指定的网络剖分频率点处的 S S S参数和场解 b如果需要分析或计算某个频段范围内 ...

  6. Replica Island 学习笔记 03 - Activity分析

    MainMenuActivity Activity界面 MainMenuActivity启动的时候,会用fade in动画逐个显示菜单按钮,并在屏幕最下方显示一个Ticker:     点击任一菜单按 ...

  7. 学习笔记 | 独立成分分析(ICA, FastICA)及应用

    学习笔记 | 独立成分分析[ICA, FastICA]及应用 1 背景说明 2 算法原理 2.1 ICA简介 2.2 形式化表达 3 算法步骤与代码 4 算法改进:FastICA 5 ICA实例与应用 ...

  8. go-pitaya学习笔记(4)-clusterdemo分析

    学习笔记: 我家别墅靠大海/pitaya-learn 尝试集成功能:我家别墅靠大海/pitaya-game 如果你正在看此笔记,请你左边放笔记,右边放chatdemo的代码!! 我是按代码的顺序记的笔 ...

  9. go-pitaya学习笔记(5)-clusterdemo分析2

    学习笔记: 我家别墅靠大海/pitaya-learn 尝试集成功能:我家别墅靠大海/pitaya-game 如果你正在看此笔记,请你左边放笔记,右边放chatdemo的代码!! 我是按代码的顺序记的笔 ...

最新文章

  1. 【Live555】live555源码详解系列笔记
  2. 关于对cross-browser支持的一些看法
  3. Activiti部署报错
  4. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)
  5. html文字添加波浪线,利用css渐变给文字下方加波浪线
  6. angular8多选框实现点击整行任意位置<tr>就可以选中多选框
  7. html实体转换成xa0,关于javascript:反应道具:在JSX动态内容中使用HTML实体?
  8. x64下进程保护HOOK
  9. 数据库介绍(MySQL安装 体系结构、基本管理)
  10. vue下载本地静态文件
  11. sqlserver格式化-年月日
  12. 【小技巧】如何将PPT的图保持高分辨率导入到Word中
  13. 程序员也要学英语——限定词、形容词和副词
  14. Vue + element + Springboot 通过邮箱找回密码
  15. 更好用计算机怎么打,电脑输入法哪个好用(最受欢迎的7大输入法对比详情)...
  16. 集团税务共享化、数字化系统如何选型(一)
  17. ocr文字识别软件:Readiris Corporate 17 Mac中文版
  18. 坚果X3怎么样好不好值得买吗,和当贝X3哪款好这篇告诉你
  19. Markdown KaTex 积分符号
  20. 用bridge创建虚拟网桥

热门文章

  1. Android下屏幕锁屏弹窗的正确姿势
  2. 2023年武汉理工大学土木工程建造与管理考研上岸前辈备考经验
  3. 在脑袋一侧上猛敲一下
  4. 一文搞懂lookup、vlookup、hlookup函数与index、match函数的使用
  5. 业界第一 | 华为云视频服务稳居编解码技术领军地位
  6. 工程伦理(李正风)课后习题答案(1-5章、10章)
  7. 高通 android 传感器支持,高通:Android手机用户明年将用上刷脸功能
  8. java显示一张图片不显示_微信图片不可显示java解决方法
  9. python识别花草_Python识别验证码的另一种花样玩法
  10. I2C驱动框架分析(3):DW_I2C驱动分析