<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>skynet - 标签 - cfanzp学习笔记</title>
    <link>https://cfanzp008.github.io/tags/skynet/</link>
    <description>skynet - 标签 - cfanzp学习笔记</description>
    <generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>cfan.zp@qq.com (cfanzp)</managingEditor>
      <webMaster>cfan.zp@qq.com (cfanzp)</webMaster><lastBuildDate>Mon, 10 Apr 2023 20:56:10 &#43;0800</lastBuildDate><atom:link href="https://cfanzp008.github.io/tags/skynet/" rel="self" type="application/rss+xml" /><item>
  <title>skynet-stat使用</title>
  <link>https://cfanzp008.github.io/skynet-stat/</link>
  <pubDate>Mon, 10 Apr 2023 20:56:10 &#43;0800</pubDate>
  <author>作者</author>
  <guid>https://cfanzp008.github.io/skynet-stat/</guid>
  <description><![CDATA[]]></description>
</item>
<item>
  <title>skynet-actor模型</title>
  <link>https://cfanzp008.github.io/skynet-actor/</link>
  <pubDate>Mon, 03 Apr 2023 11:00:55 &#43;0800</pubDate>
  <author>作者</author>
  <guid>https://cfanzp008.github.io/skynet-actor/</guid>
  <description><![CDATA[]]></description>
</item>
<item>
  <title>在centos环境下搭建skynet运行环境</title>
  <link>https://cfanzp008.github.io/skynet-centos/</link>
  <pubDate>Mon, 30 Jan 2023 11:48:29 &#43;0800</pubDate>
  <author>作者</author>
  <guid>https://cfanzp008.github.io/skynet-centos/</guid>
  <description><![CDATA[]]></description>
</item>
<item>
  <title>在ubuntu环境下搭建skynet运行环境</title>
  <link>https://cfanzp008.github.io/skynet-ubuntu/</link>
  <pubDate>Fri, 23 Dec 2022 18:23:48 &#43;0800</pubDate>
  <author>作者</author>
  <guid>https://cfanzp008.github.io/skynet-ubuntu/</guid>
  <description><![CDATA[]]></description>
</item>
<item>
  <title>lua中给日志关键字加上颜色</title>
  <link>https://cfanzp008.github.io/terminal-color/</link>
  <pubDate>Tue, 06 Sep 2022 17:05:35 &#43;0800</pubDate>
  <author>作者</author>
  <guid>https://cfanzp008.github.io/terminal-color/</guid>
  <description><![CDATA[]]></description>
</item>
<item>
  <title>skynet学习资源汇总</title>
  <link>https://cfanzp008.github.io/skynet-res/</link>
  <pubDate>Fri, 26 Aug 2022 09:01:44 &#43;0800</pubDate>
  <author>作者</author>
  <guid>https://cfanzp008.github.io/skynet-res/</guid>
  <description><![CDATA[skynet学习资源汇总 学习使用skynet已经有一段时间了，最初学习skynet是直接拿着skynet的源码已经官方例子，一点点地自己看，自己跑demo,慢慢才熟悉了skynet。这过程中就踩了不少坑，这里收集了一些skynet的学习资源，在此记录一下。
skynet的github地址: https://github.com/cloudwu/skynet skynet官方帮助文档: https://github.com/cloudwu/skynet/wiki skynet作者博客: https://blog.codingnow.com/ skynet sample: https://github.com/cloudwu/skynet_sample skynet pbc: https://github.com/cloudwu/pbc 我的skynet学习笔记: https://cfanzp.com/categories/skynet/ skynet资源：http://forthxu.com/blog/skynet.html skynet视频教程 4小时玩转skynet: https://www.bilibili.com/video/BV1AV411r71g ]]></description>
</item>
<item>
  <title>skynet中使用uuid库</title>
  <link>https://cfanzp008.github.io/skynet-uuid/</link>
  <pubDate>Tue, 02 Aug 2022 19:37:59 &#43;0800</pubDate>
  <author>cfanzp</author>
  <guid>https://cfanzp008.github.io/skynet-uuid/</guid>
  <description><![CDATA[skynet中使用uuid库 最近在使用之前一位同学写的uuid库时发现了uuid在不通的skynet虚拟机中可能会产生相同的值的现象，这里记录一下。产生的原因是，这2个虚拟机是在服务启动的时候创建的，间隔时间很短，随机种子估计是一样的。后面产生的随机序列都是一样的。
uuid库初始化种子 相同时间初始化种子，后续产生的随机数是相同的,随机种子初始化代码如下:
1 2 local uuid = require &#34;uuid&#34; uuid.seed() -- 初始化uuid种子 不同lua虚拟机中使用uuid可能生成相同的uuid,下面就是2个skynet服务在相同时间创建并初始化uuid种子的例子,不难看出，2个服务轮询接受请求，依次产生的uuid是相同的。
1 2 3 4 [:0000001a] [2022-07-29 11:36:36.561] [W] [login_web_agent1] service/login/platform/account_login.lua:111: req: 40a1bbf6-2e44-4b4a-cb9d-7a383472184b [:0000001b] [2022-07-29 11:36:44.059] [W] [login_web_agent2] service/login/platform/account_login.lua:111: req: 40a1bbf6-2e44-4b4a-cb9d-7a383472184b [:0000001a] [2022-07-29 11:36:55.069] [W] [login_web_agent1] service/login/platform/account_login.lua:111: req: bc96f82f-c94c-4398-c346-e956a92dcc11 [:0000001b] [2022-07-29 11:41:13.213] [W] [login_web_agent2] service/login/platform/account_login.lua:111: req: bc96f82f-c94c-4398-c346-e956a92dcc11 总结 这个uuid库的使用需要保证uuid的使用是在一个虚拟机内。如果想uuid不重复，又要保证唯一性，可以创建一个专有的skynet虚拟机来提供uuid的分配工作。]]></description>
</item>
<item>
  <title>skynet 更新记录</title>
  <link>https://cfanzp008.github.io/skynet-update-log/</link>
  <pubDate>Mon, 01 Aug 2022 12:56:50 &#43;0800</pubDate>
  <author>cfanzp</author>
  <guid>https://cfanzp008.github.io/skynet-update-log/</guid>
  <description><![CDATA[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 &#34;source /opt/rh/devtoolset-11/enable&#34; &gt;&gt;/etc/profile 查看gcc版本号 1 gcc -v gcc安装报错 报错问题: 1 2 3 4 Transaction check error: file /usr/lib/debug/usr/lib64/libitm.]]></description>
</item>
<item>
  <title>skynet-clearcache</title>
  <link>https://cfanzp008.github.io/skynet-clearcache/</link>
  <pubDate>Mon, 01 Aug 2022 12:52:33 &#43;0800</pubDate>
  <author>cfanzp</author>
  <guid>https://cfanzp008.github.io/skynet-clearcache/</guid>
  <description><![CDATA[skynet热更新-clearcache的使用体会 skynet 热更新主要有2种方法 第一种：使用clearcache 第二种：使用console inject lua脚本 动态创建的服务的热更新 如果一个skynet服务是在业务流程中动态创建的，那么在修改代码后，使用clearcache就可以保证下次再创建的新的服务是使用的新的代码。 创建后长期不销毁重建的服务，如何热更新？ 如果是在进程启动时创建，或创建后就一直存在的服务需要热更新怎么办呢？
方法1: 对于这种情况目前inject是首选。但是有时候需要修改的代码量比较大，inject 脚本的方式就非常复杂且容易出错。
方法2: 当然，还有一种方式就是采用轮服的机制解决。从进程级别解决问题。但是这个代价又太大了，比clearcache的成本还高。
这里我们还有一个思路就是可以在业务服前加一个管理调度服务。例如A1 skynet服务需要发消息给B1 skynet服务来实现某个功能。消息流为：
1 A1 ---&gt; B1 我们可以在B1前加一个B_manager服务，A服务通过B_manager服来传递消息给B1服务， 消息流为： 1 A1 ---&gt; B_Manager ---&gt; B1 这个时候如果B1的业务有大量需要修改的。只需要clearcache一下，然后创建一个新的B1服务，这里称为B2,B_Manager再将A1的请求转发到B2即可，这个时候的消息流为: 1 A1 ---&gt; B_Manager ---&gt; B2 这个时候B1就不会接收到新的消息了。介意B1的存在可以销毁它，如果资源占用不大，也可以不销毁。
当然这里有几个必须要注意的问题:
如果B1服务是有状态的，那么这个方法是有很大限制的，需要把B1服务的数据通过消息或共享内存，缓存等方式转移到B2服务上。
如果B1服务上有定时器等可能会影响业务的逻辑时时，必须要关闭定时器或销毁B2服务。
如果B1是无状态的那就简单多了，创建新的服务B2后，B_mananger将所有需要转发给B1的请求全都转发给B2即可。
消息中间多了一层B_Manager会不会损失性能，这个需要视业务要求来具体分析，大部分情况，这点性能损失都可以忽略不计的；当然如果你很介意的话，还是建议业务刚上线时使用B_Manager，业务稳定后，可以在某次更新时将这层转发层去掉。
上面的方法也是一种折中的方法，个人感觉还是比较好用的，但也是不完美的。
总结 关于skynet的热更新，如果你有什么更好的方案，希望能够指点一二！ 个人的一点想法，分享给大家！如果你也在使用skynet，关注我，一起学习，交流一下！ ]]></description>
</item>
<item>
  <title>skynet-给debug_console添加ag搜索</title>
  <link>https://cfanzp008.github.io/skynet-debug_console-ag/</link>
  <pubDate>Mon, 01 Aug 2022 12:46:18 &#43;0800</pubDate>
  <author>cfanzp</author>
  <guid>https://cfanzp008.github.io/skynet-debug_console-ag/</guid>
  <description><![CDATA[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(&#34;.launcher&#34;, &#34;lua&#34;, &#34;LIST&#34;) 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[&#34;total_count&#34;] = count return table_list end function COMMAND.]]></description>
</item>
</channel>
</rss>
