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)
2つのメッセージを非常にすばやく受信します。
<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ミリ秒では正しくありません。それらが間違った順序にあるとき、それらは常に間違った順序にあるように見えます、それは非常に決定論的であるように見えます。
なぜ何かアイデアはありますか?これはバグですか?寝る以外に正しい順序でそれらを取得するために私は何をすべきか考えていますか?
そこにもっと情報がある場合に備えて、メーリングリストでも尋ねられます。