cfanzp

cfanzp学习笔记

开发手册汇总

开发手册汇总 mysql8.0中文参考手册: https://mysql.bookhub.tech/#/README mysql5.7: https://www.docs4dev.com/docs/zh/mysql/5.7/reference/ mysql5.6:https://dev.mysql.com/doc/refman/5.6/en/ redis命令手册: https://www.redis.net.cn/order/ nginx官网:https://nginx.org/en/docs/ 语言 golang:https://go.dev/doc/ 在线运行golang程序 lua5.3开发手册: https://cloud.tencent.com/developer/doc/1141 lua5.4 官网英文版: http://www.lua.org/manual/5.4/manual.html rust: https://github.com/rust-lang/reference 工具 neovim:https://neovim.io/ markdown-GFM: https://gfm.docschina.org/zh-hans/ 印记中文: https://docschina.org/ 正则表达式: https://github.com/any86/any-rule

skynet 更新记录

skynet升级到1.5.0 skynet升级到1.5.0 对应lua版本:lua5.4.3 skynet地址 https://github.com/cloudwu/skynet/releases/tag/v1.5.0 下载地址:https://github.com/cloudwu/skynet/archive/refs/tags/v1.5.0.tar.gz 加速地址:https://github.91chi.fun//https://github.com//cloudwu/skynet/archive/refs/tags/v1.5.0.tar.gz 升级步骤 创建分支skynet1.5 删除skynet目录的所有文件,解压或同步skynet1.5.0的代码到skynet目录 1 rm ./skynet/* -rf 初始化skynet 1 git submodule update --init jemalloc库若未初始化成功,可手动克隆到3rd/jemalloc目录中 1 git clone https://gitee.com/mirrors/jemalloc.git 编译报错 1 2 skynet-src/spinlock.h:50:23: fatal error: stdatomic.h: No such file or directory 升级Gcc值4.9及以上版本 gcc多版本共存。 devtoolset对应gcc版本 1 2 3 4 5 6 7 devtoolset-3对应gcc4.x.x版本 devtoolset-4对应gcc5.x.x版本 devtoolset-6对应gcc6.x.x版本 devtoolset-7对应gcc7.x.x版本 devtoolset-8对应gcc8.x.x版本 devtoolset-9对应gcc9.x.x版本 devtoolset-10对应gcc10.x.x版本 https://www.cnblogs.com/jixiaohua/p/11732225.html 1 sudo yum install centos-release-scl 安装devtoolset,注意,如果想安装11.版本的,就改成devtoolset-11-gcc 1 sudo yum install devtoolset-11-gcc* 激活对应的devtoolset,可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本 这仅仅在当前bash生效,如果需要永久生效,可以请自行添加环境变量。 1 2 3 scl enable devtoolset-11 bash #或 source /opt/rh/devtoolset-8/enable gcc版本永久生效 1 echo "source /opt/rh/devtoolset-11/enable" >>/etc/profile 查看gcc版本号 1 gcc -v gcc安装报错 报错问题: 1 2 3 4 Transaction check error: file /usr/lib/debug/usr/lib64/libitm.

skynet-clearcache

skynet热更新-clearcache的使用体会 skynet 热更新主要有2种方法 第一种:使用clearcache 第二种:使用console inject lua脚本 动态创建的服务的热更新 如果一个skynet服务是在业务流程中动态创建的,那么在修改代码后,使用clearcache就可以保证下次再创建的新的服务是使用的新的代码。 创建后长期不销毁重建的服务,如何热更新? 如果是在进程启动时创建,或创建后就一直存在的服务需要热更新怎么办呢? 方法1: 对于这种情况目前inject是首选。但是有时候需要修改的代码量比较大,inject 脚本的方式就非常复杂且容易出错。 方法2: 当然,还有一种方式就是采用轮服的机制解决。从进程级别解决问题。但是这个代价又太大了,比clearcache的成本还高。 这里我们还有一个思路就是可以在业务服前加一个管理调度服务。例如A1 skynet服务需要发消息给B1 skynet服务来实现某个功能。消息流为: 1 A1 ---> B1 我们可以在B1前加一个B_manager服务,A服务通过B_manager服来传递消息给B1服务, 消息流为: 1 A1 ---> B_Manager ---> B1 这个时候如果B1的业务有大量需要修改的。只需要clearcache一下,然后创建一个新的B1服务,这里称为B2,B_Manager再将A1的请求转发到B2即可,这个时候的消息流为: 1 A1 ---> B_Manager ---> B2 这个时候B1就不会接收到新的消息了。介意B1的存在可以销毁它,如果资源占用不大,也可以不销毁。 当然这里有几个必须要注意的问题: 如果B1服务是有状态的,那么这个方法是有很大限制的,需要把B1服务的数据通过消息或共享内存,缓存等方式转移到B2服务上。 如果B1服务上有定时器等可能会影响业务的逻辑时时,必须要关闭定时器或销毁B2服务。 如果B1是无状态的那就简单多了,创建新的服务B2后,B_mananger将所有需要转发给B1的请求全都转发给B2即可。 消息中间多了一层B_Manager会不会损失性能,这个需要视业务要求来具体分析,大部分情况,这点性能损失都可以忽略不计的;当然如果你很介意的话,还是建议业务刚上线时使用B_Manager,业务稳定后,可以在某次更新时将这层转发层去掉。 上面的方法也是一种折中的方法,个人感觉还是比较好用的,但也是不完美的。 总结 关于skynet的热更新,如果你有什么更好的方案,希望能够指点一二! 个人的一点想法,分享给大家!如果你也在使用skynet,关注我,一起学习,交流一下!

skynet-给debug_console添加ag搜索

skynet:debug console添加搜索功能 为什么要给skynet的debug console添加搜索功能? 使用skynet一段时间后,发现,在动态创建skynet service的情况下,如果service很多,有时很难找到我们想要找到我们要找的那个skynet服务,用skynet的list命令会罗列所有的服务,因此我们需要像grep,ag这样的命令功能来搜索skynet的服务。 实现搜索命令ag 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 local function get_all_list(key_string) local table_list={} local all_services = skynet.call(".launcher", "lua", "LIST") local count = 0 for k,v in pairs(all_services) do if string.match(k, key_string) or string.match(v, key_string) then table_list[k] = v count = count + 1 end end table_list["total_count"] = count return table_list end function COMMAND.

git-ftp的使用

git-ftp的使用 git-ftp有什么用? git-ftp 能够方便的帮助我们将自己管理的git项目相关代码或资源提交到自己的ftp服务器上 git-ftp命令 1 2 git ftp init git ftp push 安装 首次使用需要下载安装git-ftp并进行配置 ubuntu安装 1 sudo apt-get install git-ftp mac 安装 1 brew install git-ftp mac安装过程中相关依赖可能会报错,我安装的时候遇到了报错问题,这里记录一下: 1 Error: No such file or directory @ rb_sysopen - /Users/zp/Library/Caches/Homebrew/downloads/8687c3e085e812f09d11aeca541ef9cdefbc8f971d9dd3c407c8b18bb3954957--libnghttp2-1.47.0.monterey.bottle.tar.gz 报错解决方案:安装相关库即可 1 2 3 4 5 6 brew install libnghttp2 brew install openldap brew install brotli brew install zstd brew install curl brew install git-ftp 配置 简单配置,修改.git/config添加如下配置 1 2 3 4 5 6 [git-ftp] url = your-ftp-url user = your-ftp-user password = your_ftp_url syncroot = your-local-upload-fullpath remote-root= your-ftp-upload-path(eg:htdocs) 参考 官方文档:https://github.

github资源整理

github资源整理 本文主要用于收集整理平时发现的一些优秀的github资源,以便后续学习使用 工具类 WindTerm: 一个ssh远程工具 源码:https://github.com/kingToolbox/WindTerm 下载地址:https://github.com/kingToolbox/WindTerm/releases 服务端框架 skynet框架:https://github.com/cloudwu/skynet c + lua 服务端开发框架 ftp工具 git-ftp:https://github.com/git-ftp/git-ftp