如何在雅司病中捕获进程退出?
How can I trap process exits in yaws?
一个单独的 Erlang 聊天服务器将所有 PIDs
存储在 mnesia
table 中并将它们分组在房间 ID 下,因此当用户发送消息,A gen_server
将消息发送给该 Room ID 下的所有进程。
到目前为止一切正常,但问题是:
当用户订阅服务器时,服务器向所有 pids
发送一条消息以通知订阅者有新订阅者,但是我想不出 of/know 一个实用的方法来反转它.
我需要让人们知道订阅者已取消订阅并从 table 中删除 pid。我怎样才能在雅司病中实现这样的 supervsor
?
当服务器向所有 pid 发送消息以通知它们有新订阅者时,让它也通知一个工作是 erlang:monitor/2
each new subscriber process. That process, a gen_server
, could keep a table of some sort as its state, like a map
, dict
, or ets
table, that stores the reference returned from erlang:monitor/2
along with the associated room ID. When a subscriber process dies, the monitor process will receive a {'DOWN', MonitorRef, Type, Object, Info}
message via its gen_server:handle_info/2
function 的进程,然后它可以查找 MonitorRef
处于其状态并通知关联的房间已删除订阅。
一个单独的 Erlang 聊天服务器将所有 PIDs
存储在 mnesia
table 中并将它们分组在房间 ID 下,因此当用户发送消息,A gen_server
将消息发送给该 Room ID 下的所有进程。
到目前为止一切正常,但问题是:
当用户订阅服务器时,服务器向所有 pids
发送一条消息以通知订阅者有新订阅者,但是我想不出 of/know 一个实用的方法来反转它.
我需要让人们知道订阅者已取消订阅并从 table 中删除 pid。我怎样才能在雅司病中实现这样的 supervsor
?
当服务器向所有 pid 发送消息以通知它们有新订阅者时,让它也通知一个工作是 erlang:monitor/2
each new subscriber process. That process, a gen_server
, could keep a table of some sort as its state, like a map
, dict
, or ets
table, that stores the reference returned from erlang:monitor/2
along with the associated room ID. When a subscriber process dies, the monitor process will receive a {'DOWN', MonitorRef, Type, Object, Info}
message via its gen_server:handle_info/2
function 的进程,然后它可以查找 MonitorRef
处于其状态并通知关联的房间已删除订阅。