Используя Азот, веб-инфраструктуру Erlang , у меня есть следующий метод, который получает сообщения и добавляет их в конец 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 - нет. Когда они находятся в неправильном порядке, они, кажется, всегда находятся в неправильном порядке, это кажется очень детерминированным.
Есть идеи, почему? Это ошибка? Любые идеи, что я должен сделать, чтобы получить их в правильном порядке, кроме сна?
Также спрашивается в списке рассылки , на случай, если там будет больше информации.