关于定时器的封装 为什么要封装定时器? skynet只提供定时器注册回调,缺少传参,注销,延伸等等常用方法。 实现思路一开始尝试用分配定时器id的方式实现,这种方式要考虑id重用的情况,虽然说int64走一个轮回要很久,但是这种情况还是要处理,走了一个轮回后,就有可能前面的id还被占用着,后续的id分配效率会降低。这种实现方式不是很稳定可靠。后续想了一下还是用面向对象的思想,因为前一种方式无非是timer模块用一 2023-07-02 skynet_fly实现思路历程 #skynet_fly实现思路历程
如何在skynet_fly_demo新增一个后台模块? 前言skynet_fly_demo 中的admin用的go语言gin框架的中间件模式。客户端用的vue-admin-template,项目架构是前后端分离的。我们将以添加一个警告日志模块为示例。 服务端服务端只需要通过API接口即可,通常API接口我们会按模块划分,比如用户模块就是提供/user/login,user/loginout,这在gin分格的中间件模式中,我们可以把user建一个组(gr 2023-06-30 skynet_fly 文档 > 实战篇 #skynet_fly_word
关于skynet_fly热更新实现 实现思路可以先看看这篇关于skynet做服务热更新这篇可以说是最初的实现版本,最新的完整实现 这里我主要阐述各方案比较之后觉得较好的方案三实现,我在skynet_fly也决定使用方案三,接下来进入正题。 主要思想围绕新服务替换旧服务的方案,通过讲述如何热更、rpc调用、服务切换、旧服务退出这4个点展开。可以结合代码看文档,这样应该会更清晰,表达能力有限♥(ˆ◡ˆԅ) 如何热更通过设置关闭skyn 2023-06-30 skynet_fly实现思路历程 #skynet_fly实现思路历程
关于skynet_fly的一键构建服务配置 为什么要做这个? skynet启动用的skynet_config新增一个目录都要去增加一个path并重启,我就想有没有办法不用手写path,用脚本写。 热更服务的path如果有新增模块引入,之前没有埋伏路径,增加了新路径,岂不是会找不到,很难受,这样。 新增一个服务模块每次都有手写一个config好麻烦。 热更服务需要通过curl连接 debug_console服务去执行热更。 所以这个事情必须 2023-06-30 skynet_fly实现思路历程 #skynet_fly实现思路历程
关于skynet做服务热更新 为什么要做热更新那当然是因为产品需要更新功能,但是服务功能模块又可以有用户在使用,又不想停止服务又想更新功能,就有了需要热更新的需求。无状态的服务非常好更新,例如查询服务,直接重启服务也可以,只是出现短暂的服务不可用。更新难的是有状态的服务,不能直接重启,重启就可能出现数据丢失了。 热更方式 在原本的lua虚拟机中更新这种方式通过重新加载读取_G.package.loaded中的文件,去覆盖旧_e 2023-05-22 一些想法 #一些想法
平衡二叉树的lua实现 特征 有序性 所有结点都是左子树比自己小,右子树比自己大。 平衡性 所有结点左右子树高度差绝对值小于等于一。 唯一性 结点key唯一,不能重复。 优势 适合有序性数据存储 二叉树的天然有序性 适合范围查找 基于有序的范围查找时间复杂度为o(log n) + m 缺点 内存地址分散 每个结点都是独立数据块,存储地址分散,操作速度非常依赖存储设备的寻址速度,基于机械硬盘运行将会非常慢。 操作时 2023-05-21 数据结构 #数据结构
网络七层模型 7层 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 5层 物理层,数据链路层,网络层,传输层,应用层 4层 网络接口层,网络层,传输层,应用层 物理层 传输介质,网线,光纤数据链路层 保持数据的可靠传输网络层 数据路由,ip地址传输层 tcp,udp协议,数据打包会话层 建立与管理应用程序之间的通信表示层 解决不同系统的兼容问题应用层 h 2023-05-14 socket #socket
select,poll,epoll 对比 最大链接数 select 有上限FD_SETSIZE设置 poll 链表实现,没有上限 epoll 没有上限 fd剧增带来的io效率问题 select 轮询机制, o(n)复杂度 poll 轮询机制,o(n)复杂度 epoll 事件通知机制,o(1)复杂度 消息传递方式 select 完整拷贝 poll 完整拷贝 epoll 通过内核与用户空间共享内存来实现 工作方式 select LT p 2023-05-14 socket #socket
tcp知识整理 三次握手过程 第一次握手 客户端发送建立链接请求报文SYN携带(SYN = 1,seq = x)后,进入SYN_SENT状态。 第二次握手 服务端接收到SYN报文后回复SYN+ACK报文携带(ACK=x+1,SYN=1,seq=y),进入SYN_RECV状态。 第三次握手 客户端收到SYN+ACK报文后回复ACK报文携带(ACK=y+1, 2023-05-14 socket #socket