最近朋友问我,说到他们项目不使用 skynet.call,他不是很理解,问我为啥。
于是,我看了 skynet.call 的代码。实现上,skynet.call 是服务 A 给服务 B 发 request 消息,等服务 B 处理完,再给服务 A 发 response 消息,最后交由服务 A 处理。(源代码可以参考 skynet服务的本质与缺陷)
通常,skynet.call 这个过程是没有问题的,但在服务 B 繁忙无法响应时,就可能有问题。
没有超时机制
skynet.call 没有超时机制,执行的过程不能中断,得一直等到目标服务处理完才返回,所以业务可能出现长时间中断。如果想实现超时,可以利用另外一个协程来唤醒自己。
继续阅读skynet.call 潜在问题