erlang进程间多播



我正在尝试在erlang中开发一个聊天服务器,并且我想在一组进程之间广播消息,我提出了三种替代方案

  1. 将每条消息发送到主进程,主进程将消息发送到对于团队的其他成员来说,这对我来说就像是一个瓶颈
  2. 使用全局ets表,该表包含该组的所有pid(复制过多)
  3. 使用upd多播
  4. pg模块,与1相同

什么是最好的方法,还有其他选择吗?

更自然的方法是让每个进程都知道它将与之通信的每个其他进程的pid()。保持[pid()]处于进程状态,并通过使用link/1使其保持最新状态,以在进程死亡时接收{EXIT’,pid,Reason}。

Erlang中的多播正在向每个接收方单播。除此之外,没有其他方式可以广播信息。由于您只有少量的进程,我认为您在复制方面不会有任何问题。至少我不会太担心它,直到它成为系统的瓶颈。

不要低估保持一个进程作为一个组的多主机。这可能是一个简单的解决方案,尽管只是在ETS表中保留pid()或使用gproc可能大致相同。

一开始担心过度复制可能不会有什么结果。这里的一个技巧可以是将消息存储为一个大的二进制文件,然后四处发送。然后,正如马塞洛所写,你只能绕过参考资料。

Vance Shipley关于链接的解决方案是我会避免的。链接是双向的,您必须捕获出口才能获得出口消息。通过调用erlang:monitor(process, Pid)来维护终身知识可能更好。您需要这样做,因为离开的流程必须从组中删除。收到形式为{'DOWN', ..., ...}的消息将表明您需要注意清理。

相关内容

  • 没有找到相关文章

最新更新