gen用什么OTP模式

所以我有一个非阻塞的OTP套接字服务器,与Learn Yorself中的一个非常相似。一些Erlang:

http://learnyousomeerlang.com/buckets-of-sockets

监督者将监听套接字传递给动态生成的gen_servers,每个gen_servers可以接受单个连接; 通过这种方式,监听套接字不会被(阻塞)对gen_tcp:accept的调用阻塞,并且由监督器产生的每个gen_server都有效地代表单个客户端。

现在,这一切都非常好,我可以通过telnet与服务器通话,这是一个简单的echo处理程序,回应我的请求。

但是如果我想将它扩展到一个简单的聊天服务器呢? 很明显,这里缺少的是向所有连接的客户端发送广播消息的能力。 但是目前没有任何gen_server客户端知道其他任何客户端的存在!

一个gen_server能够获得所有其他pid的合理OTP兼容模式是什么? 我唯一能想到的方式是在gen_server状态变量中包含一些包含pids / username的mnesia / ets表,但不知何故,这看起来并不像OTP那样。

想法?

提前致谢。


使用ETS表来存储Pids将是一条路。 我会使用一个受监督的进程作为表管理器,并在添加到ETS表中的Pid上设置监视器,这样您就可以检测进程何时死亡并可以从ETS表中删除它。

对于使用ETS时的容错能力,您需要采取一些预防措施,请参阅不要松动您的ets表以了解如何执行此操作。

但是对于一个真正的系统,我会使用pg2或gproc模块来完成这种工作。 pg2包含在OTP中,更多地面向分布式系统,gproc更加灵活。 两者都使用ETS表来存储数据。

链接地址: http://www.djcxy.com/p/38187.html

上一篇: What OTP pattern to use for gen

下一篇: How to debug an erlang application that won't boot