skynet别名源码分析:skynet学习笔记 源码之sknyet_handle句柄_从零到一万物起源的博客-优快云博客
别名简介
别名用于绑定服务id,方便服务之前发送消息。
api
function skynet.register(name)
if not globalname(name) then
c.command("REG", name)
end
end
注册别名函数没有关注返回值,但其实会有别名冲突注册别名失败的情况。这时候我们自认为程序没有任何问题。但是这会成为你们项目里面莫名其妙的bug😀。别名注册函数讲究先到先得,所以后注册的服务没有绑定关系。
恍然大悟的吧
也就是说,你写代码的本意是想给后注册别名的服务发送消息,但是永远会发给先注册的服务。
踩坑场景
一个大量使用lua服务
自定义分配的id
自定义分配id注册别名
call调用的异步
导致多个服务注册同一别名
建议
大量使用的服务最好不要使用别名,直接使用skynet分配服务id,本身使用服务id发送消息的速度会比使用别名快很多,因为使用别名,框架需要通过别名查找服务id,然后插入消息。查找别名用的是2分查找,时间复杂度为logn,大量注册别名也会增加查找时间。