使用Erlang Web 框架 Nitrogen,我有以下方法接收消息并将它们添加到 html 元素的底部:
receive_messages() ->
receive
Message ->
io:format("~p received ~p", [self(), Message]),
wf:insert_bottom(messages, [#p{}, #span { text=io_lib:format("~p", [Message]) }])
end,
wf:comet_flush(),
receive_messages().
它被设置为彗星的通常方式:
wf:comet(fun() -> receive_messages() end)
它很快收到两条消息:
<0.907.0> received {starting_chat,<0.905.0>}
<0.907.0> received {connected_to,<0.902.0>}
这是我在 HTML 中看到的:
{connected_to, <0.902.0>}
{starting_chat, <0.905.0>}
不知何故,它们以相反的顺序结束。
我已经开始向这个方法添加 timer:sleep() 调用。在 50 毫秒内,它们的顺序是正确的,而在 20 毫秒内则不是。当它们的顺序不正确时,它们似乎总是处于不正确的顺序,这似乎非常具有确定性。
任何想法为什么?这是一个错误吗?除了睡觉之外,我应该怎么做才能让它们按正确的顺序排列?
还在邮件列表中询问,以防那里有更多信息。