简体   繁体   中英

How can I trap process exits in yaws?

A separate Erlang chat server stores all PIDs in a mnesia table and groups them under a Room ID so when a user sends a message, A gen_server sends the message to all processes under that Room ID.

so far everything works great but the problem is:

When the user subscribes to the server, The server sends a message to all pids to notify subscribers about a new subscriber, however I cannot think of/know a practical way to do reverse of it.

I need to let people know that a subscriber has unsubscribed and remove the pid from the table. How can I implement such supervsor in yaws?

When the server sends a message to all pids to notify them of a new subscriber, have it also notify a process whose job is to 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 , and it can then look up the MonitorRef in its state and notify the associated room of the dropped subscription.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM