【问题标题】:How can I trap process exits in yaws?如何在 yaws 中捕获进程退出?
【发布时间】:2016-12-10 11:32:09
【问题描述】:

一个单独的 Erlang 聊天服务器将所有 PIDs 存储在一个 mnesia 表中,并将它们分组在一个房间 ID 下,因此当用户发送消息时,gen_server 将消息发送给所有该房间 ID 下的进程。

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

当用户订阅服务器时,服务器会向所有pids 发送消息以通知订阅者有新订阅者,但是我想不出/不知道一种实用的方法来进行反向操作。

我需要让人们知道订阅者已取消订阅并从表中删除 pid。如何在 yaws 中实现这样的supervsor

【问题讨论】:

    标签: erlang yaws


    【解决方案1】:

    当服务器向所有 pid 发送消息以通知他们有新订阅者时,让它也通知一个进程,其工作是 erlang:monitor/2 每个新订阅者进程。该进程,gen_server,可以保持某种表作为其状态,如mapdictets 表,它存储从erlang:monitor/2 返回的引用以及相关的房间 ID .当订阅者进程死亡时,监控进程将通过其gen_server:handle_info/2 function 接收到{'DOWN', MonitorRef, Type, Object, Info} 消息,然后它可以在其状态中查找MonitorRef 并通知相关房间删除订阅。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 2012-08-19
      • 2014-11-01
      • 2015-02-03
      • 2011-05-18
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多