新手问题: 如何快速重载lua脚步

224 views
Skip to first unread message

Zheng Ping

unread,
Mar 16, 2017, 5:43:34 AM3/16/17
to skynet-users
新手问题:
skynet会缓存lua脚本,而开发时,需要不断重新载入某个被修改过的lua文件,我用了
require("skynet.codecache").mode("OFF")
似乎不起作用,不知道有什么办法可以在不重启skynet服务的情况下可以再次载入当前修改过的lua文件.

还有个问题, 是不是skynet中loadstring()这个函数不能用啊? 我用print( loadstring )打印出来是nil.

Message has been deleted

Zheng Ping

unread,
Mar 17, 2017, 3:43:50 AM3/17/17
to skynet-users
搜了一把,解决了一个问题, 原来lua 5.3中loadstring变成load了. 现在就看看怎么在开发时重复载入修改过的lua文件了。

在 2017年3月16日星期四 UTC+8下午5:43:34,Zheng Ping写道:

Zheng Ping

unread,
Mar 20, 2017, 11:09:44 AM3/20/17
to skynet-users
现在我用io.open还是不能在skynet中热加载lua文件, 我是这样做的:

local file = io.open(path, "rb")
local data = file:read("*a")
file:close()
package.loaded[mod] = nil
package.loaded[mod] =load(data)()

可是当我更改lua文件后,发现代码缓存依旧存在,请问大神用load函数怎么绕过代码缓存加载lua文件啊?

用"skynet.codecache"的clear函数是可以达到这个效果的, 但不知怎么使用load函数才算是正解.


在 2017年3月16日星期四 UTC+8下午5:43:34,Zheng Ping写道:
新手问题:

肖津

unread,
Mar 21, 2017, 5:33:25 AM3/21/17
to skynet-users
试试 reload 服务吧

Zheng Ping <kyt...@gmail.com>于2017年3月20日周一 下午11:09写道:
--
您收到此邮件是因为您订阅了Google网上论坛上的“skynet-users”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到skynet-users...@googlegroups.com
要发帖到此群组,请发送电子邮件至skynet...@googlegroups.com
访问此群组:https://groups.google.com/group/skynet-users
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/skynet-users/2e8d925c-5b4c-4c46-976d-82657b605cb2%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

Zheng Ping

unread,
Mar 21, 2017, 11:31:23 PM3/21/17
to skynet-users

请问reload服务是个什么服务? 是自己写还是有现成的?

我发现问题在于多个服务都加载了我修改的lua脚本, 而我只是修改了单个服务所在lua VM的package.preload和package.loaded表,我需要对所有加载了这个lua文件的服务都改写一下package.preload和package.loaded表.

这确实需要一个合理的服务代码组织结构. 的确需要技巧.

在 2017年3月21日星期二 UTC+8下午5:33:25,肖津写道:
试试 reload 服务吧

Reply all
Reply to author
Forward
0 new messages