WF에 대한 두 번의 빠른 연속 호출 : insert_bottom은 반대 순서로 끝납니다.

StackOverflow https://stackoverflow.com/questions/2002487

  •  18-09-2019
  •  | 
  •  

문제

사용 질소, 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>}

어떻게 든, 그들은 역순으로 끝났습니다.

이 메소드에 타이머를 추가하기 시작했습니다 : sleep () 호출. 50 밀리 초로, 그들은 올바른 순서에 있으며 20 개는 없습니다. 그들이 잘못된 순서에있을 때 그들은 항상 잘못된 순서로 보이는 것처럼 보이며, 그것은 매우 결정적인 것 같습니다.

왜 아이디어가 있습니까? 이것은 버그입니까? 어떤 아이디어 어떤 아이디어도 자고있는 것 외에 올바른 순서로 얻으려면 어떻게해야합니까?

또한 메일 링리스트에서 요청했습니다, 더 많은 정보가있는 경우.

도움이 되었습니까?

해결책

wf_comet.erl inner_collect_content를 적용한 후 "이상한"리버스 호출이 있습니다. 내 추측은 내부 _collect_content가 언젠가는 꼬리를 상거 당했다는 것입니다.

타임 아웃을 적용하면 메시지가 다른 루프로 수집되므로 주문이 더 이상 반전되지 않습니다.


다른 저장소에서 이것을 해결하는 커밋이있는 것 같습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top