![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lua
28号技师
黄沙百战穿金甲,不破楼兰终不还
展开
-
skynet queue
由于skynet服务有重入问题,所以找到了一个skynet queue方法。简单用法,假设test为在服务中需要顺序执行的函数。只要把一个函数往queue扔就行了。local function test() print("hello world")endlocal queue = require "skynet.queue"queue(test)翻了一下源代码,实现是用一个闭包函数达到目的。整体思路就是记录下current thread,判断current thread是否和.原创 2021-03-18 00:47:58 · 599 阅读 · 0 评论 -
skynet 热更新
inject热更新inject命令相当于注入代码到服务中,原理就是让指定服务执行某个代码文件,通过修改模块及其函数的upvalue,完成对lua模块代码或变量的替换。实践过程中,发现一个注意点:_P 内存的 key/value 其实就是 skynet.lua 里 14 行 proto 中的 name 和 dispatch 的 upvalue。inject用法很简单,启动skynet,连接到其控制台:# nc 127.0.0.1 8000Welcome to skynet c...转载 2021-03-16 22:24:09 · 568 阅读 · 0 评论 -
lua的面向对象
lua中可以用table来描述对象的属性。lua中的类可以通过 table + function 模拟出来。简单例子:Retangle = {area = 0, length = 0, breath = 0}function Retangle:new(o, length, breath) o = o or {} setmetable(o, self) self.__index = self self.length = length or 0 self.breat原创 2021-03-08 22:37:30 · 78 阅读 · 0 评论