我在为实时网络应用构建框架。我开始这样做Elixir,因为 它是现代的方式如何开发应用程序Erlang VM。 如果你需要并发,容错,可伸缩的应用程序(比如web服务器等),Erlang应该是不错的选择。这正是我需要的。是Erlang这个应用程序的糟糕语言吗?
问题:实时框架总是需要保存关于谁对什么感兴趣的信息。这将通过使用发布/订阅模式来完成。所以我将有1000个客户订阅主题“最新消息”。如果出现主题“最新消息”的内容,我需要将这些客户端(代表每个客户端的进程的pid)保存在某处以便稍后访问它们。 如果Erlang对我的框架非常好,这就是我的困惑。
ETS可能是存储共享数据的唯一选择,但如果您保存/访问记录,ETS始终会复制所有内容。所以这意味着当我需要访问它们时,总是复制1000个pid(而不是仅仅遍历某个列表,如果我将在c/java/python中进行实例)。 如果仍然复制来自ETS(许多客户,许多订阅等)的许多记录,这可能是很大的瓶颈,我是对的?
您将这个框架作为一个关于Erlang的问题来构建,但是在您甚至已经探究到问题空间之前,为这个非常糟糕的架构设置了任意条件。我建议你在跳到更多的结论之前去找#erlang或ML来征求建议。 – zxq9 2014-09-11 10:12:18
看看这个https://github.com/uwiger/gproc – 2014-09-11 10:45:47
RabbitMQ是用Erlang编写的,它完全符合你的需求。看看,他们是如何解决问题或只是使用它。 – tkowal 2014-09-11 11:30:04