單獨二郎聊天服務器存儲下一個房間ID,以便當用戶發送的消息的mnesia
表和組他們所有PIDs
,A gen_server
將消息發送到根據該房間ID的所有進程。如何捕獲雅司病毒中的進程退出?
到目前爲止一切都很正常,但問題是:
當用戶訂閱服務器,該服務器將消息發送到所有pids
通知有關新用戶的用戶,但我想不出/知道切實可行的做法。
我需要讓人們知道訂戶已取消訂閱並從表中刪除該pid。我怎樣才能在雅司中實現這樣的supervsor
?
單獨二郎聊天服務器存儲下一個房間ID,以便當用戶發送的消息的mnesia
表和組他們所有PIDs
,A gen_server
將消息發送到根據該房間ID的所有進程。如何捕獲雅司病毒中的進程退出?
到目前爲止一切都很正常,但問題是:
當用戶訂閱服務器,該服務器將消息發送到所有pids
通知有關新用戶的用戶,但我想不出/知道切實可行的做法。
我需要讓人們知道訂戶已取消訂閱並從表中刪除該pid。我怎樣才能在雅司中實現這樣的supervsor
?
當服務器向所有pids發送一條消息以通知他們一個新的訂閱者時,是否還通知一個進程,該進程的作業是erlang:monitor/2
每個新的訂閱者進程。該過程(gen_server
)可以保留某種表格作爲其狀態,如map
,dict
或ets
表格,該表格存儲從erlang:monitor/2
返回的引用以及關聯的房間ID。當用戶進程死亡時,監控進程將通過其gen_server:handle_info/2
function收到一條{'DOWN', MonitorRef, Type, Object, Info}
消息,然後它可以在其狀態中查找MonitorRef
,並通知相關聯的房間丟失預訂。