2016-08-04 59 views
0

单独二郎聊天服务器存储下一个房间ID,以便当用户发送的消息的mnesia表和组他们所有PIDs,A gen_server将消息发送到根据该房间ID的所有进程。如何捕获雅司病毒中的进程退出?

到目前为止一切都很正常,但问题是:

当用户订阅服务器,该服务器将消息发送到所有pids通知有关新用户的用户,但我想不出/知道切实可行的做法。

我需要让人们知道订户已取消订阅并从表中删除该pid。我怎样才能在雅司中实现这样的supervsor

回答

3

当服务器向所有pids发送一条消息以通知他们一个新的订阅者时,是否还通知一个进程,该进程的作业是erlang:monitor/2每个新的订阅者进程。该过程(gen_server)可以保留某种表格作为其状态,如map,dictets表格,该表格存储从erlang:monitor/2返回的引用以及关联的房间ID。当用户进程死亡时,监控进程将通过其gen_server:handle_info/2 function收到一条{'DOWN', MonitorRef, Type, Object, Info}消息,然后它可以在其状态中查找MonitorRef,并通知相关联的房间丢失预订。