2
如果我向遠程節點發送了很多消息,並且立即調用erlang:disconnect_node/2
來刪除連接,有沒有機會發送一些消息不通過線路?換句話說,無論等待消息,該方法是否會執行殘酷的斷開連接?是否erlang:disconnect_node/2立即停止排隊的消息?
如果我向遠程節點發送了很多消息,並且立即調用erlang:disconnect_node/2
來刪除連接,有沒有機會發送一些消息不通過線路?換句話說,無論等待消息,該方法是否會執行殘酷的斷開連接?是否erlang:disconnect_node/2立即停止排隊的消息?
不,即使有兩個本地節點!
設置:我得到了一個節點[email protected]
,在虛擬接收打印循環運行時,註冊爲a
。在另一個節點上,我跑
([email protected])1> [{a, [email protected]} ! X || X <- lists:seq(0,10000)], erlang:disconnect_node([email protected]).
也就是說,很多消息,然後一個殘酷的斷開。
結果:接收器在10次運行中僅打印一次完整的10001消息。
所以,你絕對沒有任何保證,接收者得到了所有的消息。你應該使用另一種技術(erlang的新手,抱歉),或者在斷開連接之前使用確認消息。