我正在使用它的Channel和Socket模块开发实时Phoenix应用程序。该应用程序由几个进程和GenServers组成。我有一个用例,在一个事件上(这是一个来自微服务的API调用),我需要在不同的时间戳上向我的频道上的所有不同主题广播消息。我现在在本地机器上使用Process.send_after(..)实现了这个目的。但我怀疑是:
在一组机器上,因为API调用只会命中集群中的一台机器, 其他机器无法发送广播消息。这会导致不准确。我怎样才能让所有机器知道这个特定的事件?或者我做错了吗?
答案 0 :(得分:1)
假设您知道群集中节点的名称,您可以循环节点,在每个节点上调用Node.spawn/2
:
def broadcast(msg) do
Process.send_after ...
end
def broadcast_everywhere(msg) do
Enum.each(@nodes, fn node ->
# if not node == Node.self do
Node.spawn node, fn ->
Broadcaster.broadcast(msg)
end
# end
end)
end
如果当前节点已经提供,则取消注释注释行,并且[可能]以某种方式确保节点已连接并且预先存在。
此外,Node.spawn_link/*
可能值得一看。