关于skynet.queue使用的问题 #1790
ericzhanchina
started this conversation in
General
Replies: 2 comments 2 replies
-
存数据库直接 skynet.send即可吧,发送给mysql服务,让mysql服务自己排队处理。 |
Beta Was this translation helpful? Give feedback.
2 replies
-
afk msgagent 也没必要立即退出吧,我一般是延迟一定时间 强制 save完后退出,这时候上来,就取消退出的定时器 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
最近发现代码有一个比较大的bug,我的msgagent有一个后台运行的协程,使用skynet.timeout启动起来的,主要是每隔2分钟将内存中变化的数据写回到mysql中,调用save2mysql函数,当玩家afk之后,也会定时几分钟后清理msgagent的数据,保存玩家的最新状态到mysql也会调用save2mysql,然后skynet.exit(),存数据库是skynet.call调用到mysql服务的,我发现如果save2mysql这个函数在执行过程中,afk的程序也同时执行的话,会造成save2mysql没有执行完,比如5个sql语句执行了3条,afk那边的清理程序已经把msgagent服务给结束了,这样剩下的两条就无法执行了。
看了云风关于skynet.queue的用法,想把save2mysql放到queue里面去保护起来,这样应该可以保证save2mysql没有执行完成的时候,afk的代码会等着他执行完再执行后续的skynet.exit吧。
以上不是严格的代码,只是手写的示意,请指点一下,这样是否可以达到afk的清理和save2mysql不会相互影响的目的。
Beta Was this translation helpful? Give feedback.
All reactions