最近想在skynet中拓展一个库, 目的是为了让同进程内多个服务能共享一部分数据, 这部分数据要求可以频繁读写, sharetable不符合我们的要求。
想了一下, 实现起来应该很简单, 同进程内不同的lua虚拟机在C里使用同一份指针不是什么困难的事, 本想着自己实现一个, 但是想一想这东西应该早就有人做过了才对
翻了一下github, 发现了一个仓库lua-stable
看了一下大致符合要求, 不过还有一些bug
例如array resize的时候使用了rawset, 会导致后续的调用不会再走到元表的__newindex, 但作者这里写了todo remote resize, 但也一直没更新
这里不确定还有没有其他问题
我需要写一些测试用例测试一下所有类型的正确性,然后修复一下问题, 另外再拓展一些功能
再仔细看了一下, 问题不仅仅在于array的resize, 而是对于struce和array, 使用rawset都会导致后续的替换赋值有问题,因为rawset之后就变成了本地表,不在走index和newindex了
删掉了resize,对于数组和表,不再使用rawset,rawget,每次通过c获取对象再重新绑定成lua对象,至少目前保证了正确性