skynet
文章平均质量分 50
BanFS
欠的技术债,早晚要还
展开
-
从头开始读skynet源码(6)skynet.start服务器启动之后做了什么之thread_socket(skynet网络线程(一))
接上回,继续分析skynet网络线程。主要分析的是tcp网络线程执行代码如下。socket_server的创建skynet_state.c中调用的时候调用skynet_socket_init初始化void skynet_socket_init() { SOCKET_SERVER = socket_server_create(skynet_now());}struct socket_server * socket_server_create(uint64_t time) { int i;原创 2021-04-04 15:17:44 · 435 阅读 · 0 评论 -
从头开始读skynet源码(5)skynet.start服务器启动之后做了什么之thread_timer(skynet定时器)
继续按照skynet.start中的顺序分析。分析skynet定时器。启动各个线程都会做类似的初始化。定时器分析这里要做一个前置理解,定时器,是只需要关心最近即将到来的任务,而不用关心距离现在比较远的任务,例如1.你注册了100个定时任务,定时任务按照时间排序后2.A任务2s后触发,B任务3h后触发,C任务h后触发…3.当刷新时间的时候,需要去拿到即将到来的任务而需要关心之后的任务,这里就是只需要关心A任务,也就是你不需要去遍历所有任务列表拿到即将发生的任务,因为B之后的任务包括B,都不需要去关系原创 2021-03-21 21:48:14 · 284 阅读 · 0 评论 -
从头开始读skynet源码(4)skynet.start服务器启动之后做了什么之monitor(监视者)
monitormonitor分为服务器的monitor 和 skynet_monitor,整个服务器只有一个服务器monitor,每条工作线程绑定一个skynet_monitor,上面在声明了若干条线程数量后,先做的就是创建服务器monitor。服务器 monitor// 可以把服务退出的消息从框架层抛出来,让上层逻辑可以感知到struct monitor { int count; // 多少条工作线程 struct skynet_monitor ** m; // skynet_moni原创 2021-03-21 17:01:09 · 298 阅读 · 0 评论 -
从头开始读skynet源码(3)skynet.start服务器启动之后做了什么
俗事缠身,加上自己有点懒,skynet分析的事情拖了很久,之后尽快分析完。其实skynet是一个很优秀的框架,值得细读,多读(上加公司的老大这么对我说的,现在我也觉得是这样的)。skynet.star东西比较多,分四篇分析。下面直接进入正题。启动服务器skynet_start()start传入配置的线程数量,启动服务器。void skynet_start(struct skynet_config * config) { ... // 调用start传入配置线程数量 // 这个线程数量就是工作线原创 2021-03-21 16:54:12 · 284 阅读 · 1 评论 -
从头开始读skynet源码(2)服务器启动的前置任务 bootstrap 与 skynte.newservice
上一篇分析之后,本来第二部分分析是想分析start之后的逻辑的,这样会让人比较快速的理解skynet框架。但想想还是顺着代码启动的思路写下去会比较好,我觉得这样我自己更容易理解。 bootstrap是引导程序的意思,在skynet中,的确也是做了服务器工作的前置任务。再skynet_start.c中//启动logger服务struct skynet_context *ctx = skynet_context_new(config->logservice, conf...原创 2020-12-13 15:28:46 · 658 阅读 · 3 评论 -
从头开始读skynet源码(1)main入口干了什么
使用skynet一年半了。源码也断断续续读了不少,也看了几篇skynet的源码分析。他们都说的很好。但是觉得分析只是给你一个理解代码的观点,但是没个人的理解方式是不一样的,我也写一写我自己的理解。 下面进入正题。 首先,还是要有一个观念,skynet是干嘛的,云风前辈的Skynet 设计综述,wiki什么的都是要读的。然后进入正题。 从我学习开始,我理解的一个C/C++程序都是从main函数开始运行的,skynet也不例外。以下的代码关键部分都带...原创 2020-10-24 19:32:03 · 596 阅读 · 0 评论 -
skynet踩坑记录(四)cluster集群通信中,传递的消息过大造成的问题。
昨天更新后,一直触发这个报错。第一眼看我都吓懵了,这什么鬼报错,call fail。框架级别的报错。这怎么解决。理性分析,然后在同事的提醒下查看了core的日志,然后发现一查代码,发现原来是集群通信中,传递的包过大造成的。获取玩家排行榜历史的时候,我缓存的所有玩家的历史,这样每个玩家只需要去拿就行了,不需要再进行多余的db操作。检查自己的逻辑,的确是发了很大的包。测试的时候数据不足,并没有发现。想起在云风的blog中也说过,集群通信有错误会提示,但是业务层面要自己重新...原创 2020-10-23 09:26:58 · 949 阅读 · 0 评论 -
skynet踩坑记录(三)skynet.call的挂起实际中可能造成的后果。
在刚开始使用skynet的时候,就已经知道call方法会挂起。但是一直到今天,都无法深刻理解这个挂起的意思。直到碰到了这个问题。解决后做此记录。 1.先描述一下出现的情况。 先暂且不管为什么要对db进行这么多次操作(原因太多)。在这个需求下,我本是想执行顺序为 1234,但是实际上确时1324。这会导致3拿到的是2更新之前的数据。今日参加次数就会在执行4的时候,没有能更新到2更新的内容。 2.为什么会出现这样的情况呢。 ...原创 2020-09-18 16:51:02 · 1617 阅读 · 0 评论 -
skynet踩坑记录(一)客户端连接之watchdog gate agent复杂错乱关系。
笔者转行做游戏服务器开发有四个月了,现在公司用的是skynet框架,由于之前没做过服务器开发,现在还是处于边学习,边跟项目的情况。由于工作原因,网络这一块断断续续看了两个星期,一直没理解,今天再看的时候,终于懂了skynet监听网络端口的流程,也懂了,客户端是怎么连接的。果然应了那句话:欠了技术债,早晚要还的。(学习一定要专注啊!!!可以省好多时间。) 这张图是在网...原创 2019-08-19 20:23:20 · 2045 阅读 · 0 评论 -
skynet踩坑记录(二)agent引用代码模块。
前几天,在写游戏逻辑时,需要在不同的代码块中引用我写的逻辑模块(以下简称C模块)来对玩家数据进行修改。由于对skynet理解不够,多模块中调用自己写的逻辑时,例如:A模块调用C,B模块也调用C,我在C模块中多次对数据库进行了操作,以便可以让不同的模块能操作到同一组数据。 经理看了我的代码之后,对我进行了指导,作此记录: 1.每个agent都是一个独立的...原创 2019-07-28 14:44:33 · 1197 阅读 · 0 评论