使用氮,Erlang的web框架时,我有接收消息,并将它们添加至底部下面的方法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>}

不知何故,它们以相反的顺序结束。

我已经开始增加定时器:睡眠()调用该方法。随着50毫秒,他们是按照正确的顺序,与20他们没有。当他们是不正确的顺序,他们似乎从来都是不正确的顺序,似乎很确定的。

任何想法,为什么?这是一个错误?任何想法我应该怎么做才能比其他睡让他们以正确的顺序?

此外请在邮件列表,万一有的详细信息在那里。

有帮助吗?

解决方案

wf_comet.erl 具有“怪“应用inner_collect_content后反向调用。我的猜测是曾经是尾递归较早前该inner_collect_content。

如果你申请超时,邮件将被收集在不同的循环,一个接一个,所以为了不再被逆转。


有似乎是一个提交于另一个存储库的固定这样的:

http://github.com/gersh/nitrogen/commit/a8bfcb23d003e68f7394a0455285beeb0fbf9b09

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top