2009-08-24 5 views
4

나는 Erlang과 혜성 채팅을하고 있습니다. 메시지 전송에는 하나의 연결 (긴 폴링) 만 사용합니다. 그러나 아시는 바와 같이 긴 폴링 연결은 항상 연결 상태를 유지할 수 없습니다. 새 메시지가 오거나 시간 제한에 도달 할 때마다 서버가 중단 된 다음 다시 연결됩니다. 연결이 다시 연결되기 전에 메시지가 전송되면 채팅 무결성을 유지하는 것이 좋습니다.Erlang (Comet chat)의 메시지 대기열 모델?

또한 사용자가 Comet-chat으로 하나 이상의 창을 열면 모든 채팅 메시지가 동기화 상태를 유지해야하기 때문에 사용자는 많은 긴 폴링 연결을 가질 수 있습니다. 따라서 모든 메시지를 제때에 전달하는 것은 어렵습니다.

모든 연결에 대해 메시지 큐를 만들어야합니까? 아니면 이것을 해결하는 더 좋은 방법은 없을까요?

+0

많은 브라우저가 서버 당 최대 2 개의 활성을 갖도록 구성됩니다. 모든 구독이 통과하는 하나의 긴 폴링 통신 채널을 갖는 것이 좋습니다. – Christian

답변

1

사용자 당 하나의 프로세스/메시지 대기열이 채팅에 연결되어있는 가장 간단한 방법 인 것 같습니다 (둘 이상의 채팅 창을 포함 할 수도 있음). 채팅 창 응용 프로그램에서 마지막 메시지의 타임 스탬프를 추적하고이 시간 소인 이후에 메시지를 요청할 때 다시 연결합니다. 메시지 큐 프로세스는 적절한 시간 동안 만 메시지를 보관해야합니다. 이 시나리오에서 재 연결은 모두 클라이언트에 달려 있습니다. 다른 시나리오에서는 서버에서 하트 비트를 보낼 수는 있지만 내게는 덜 신뢰할만한 것으로 보입니다. 단절의 다른 이유는 시간 초과보다 문제를 해결하지 않습니다. 서버 측 큐잉에는 클라이언트 측, 사용자 별, 채팅방 당 하나의 대기열이 있습니다.

+0

답변 해 주셔서 감사합니다. 그리고이 방법은 내가 지금 사용하고있는 것입니다. 하나의 작은 문제 : 지연된 메시지는 긴 폴링 연결이 설정된 다음 번 (또는 새로운 메시지가 오는 경우) 이후에만 전송 될 수 있으므로 약간의 대기 시간이 발생합니다. –

+0

끊김 현상을 방지하기 위해 하트 비트 메시지를 사용할 수도 있지만 일관성을 위해 의존하지 마십시오. –