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.