skynet使用时遇到的坑 -2 skynet别名别滥用

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,大量注册别名也会增加查找时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值