skynet:skynet.call() 失敗

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)

測試結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章