上次 写了一篇文章讲 skynet.send,最近想起一个 call 的问题,流程跟 skynet.send 差不多,再记录一下

虽然官方 wiki 并没有记录,但是 skynet.call 一个不存在的服务,并不会报错的,最神奇的是当你真的起了同名的服务,这个服务就真的能收到这条消息。skynet.call 本质上还是 skynet.send,只是 send 完以后将 session 号和 coroutine 记下来,然后自己调用 yield 将控制权交还给 skynet。按上篇文章所述,给一个不以 . 开始的名字发消息,会经过 service_harbor.cremote_send_name 函数。该函数先从 harbor 服务记录的名字哈希表里查找,找不到就新建一个 queue,将消息堆在里面。等同名服务起来后,就可以收到这条消息了