skynet.call() 是一個阻塞函數,服務使用 skynet.call 發出請求後會等待應答,此時:
-
若響應服務退出(調用skynet.exit),會自動給未答覆的請求發送一個 error 消息,告訴它可以從 skynet.call 阻塞返回了,請求的服務會直接報一個錯誤;
-
若響應服務正常,但並未返回響應,則 skynet.call 阻塞會返回,同時請求的服務會收到一個告警信息:“Maybe forgot response session”。
一、服務直接退出
測試腳本採用前面的文章:skynet:session,區別在於 echoluamsg.lua 不同:
skynet = require "skynet"
require "skynet.manager"
skynet.start(function()
skynet.register("echoluamsg")
skynet.dispatch("lua", function(session, address, msg)
skynet.exit()
end)
end)
測試結果:
二、服務未返回響應
echoluamsg.lua
skynet = require "skynet"
require "skynet.manager"
skynet.start(function()
skynet.register("echoluamsg")
skynet.dispatch("lua", function(session, address, msg)
print("1")
end)
end)
測試結果: