2010-06-04 2 views
8

나는 facebook 채팅과 같은 채팅을 만들어야합니다.혜성 VS Ajax 폴링

혜성으로 나는 연결을 유지하기 위해 더 많은 메모리가 필요합니다.

Ajax 폴링을 사용하면 3-4 초마다 요청을 보내면 대기 시간 문제가 발생합니다.

대기 시간 (3 ~ 4 초)이 중요하지 않으면 Ajax 폴링이 내 경우에 더 좋습니까?

+1

나는 당신이 거기서 당신 자신의 질문에 대답했다고 생각한다 : –

답변

1

대기 시간이 문제가되지 않는다면 아마 AJAX가 더 좋습니다. 매우 조심하지 않으면 Comet은 동일한 클라이언트/서버 쌍 사이에 여러 개의 연결을 유지하는 데 문제가 발생할 수 있습니다. (Ref)

6

대기 시간이 유일한 문제는 아닙니다. COMET (long-polling)은 트래픽을 "저장"합니다. 폴링을 사용하면 서버에 변경 사항이 있는지 알 수 없기 때문에 일부 호출은 트래픽 및 리소스 낭비 일 수 있습니다 (예 : 아무도 채팅, 3 ~ 4 초마다 전화 걸기). COMET의 경우 일반적으로 서버에서 업데이트 (100 % 적중률)를 얻기 위해 한 번의 호출 만 필요합니다.

+2

하지만 혜성과 함께, 나는 연결을 열어두기 위해 더 많은 기억이 필요하다 ... 안돼? – xRobot

+1

연결 자체를 유지하는 것은 그렇게 해롭지 않습니다. 메모리 사용량은 블로킹 또는 비 블로킹과 같은 서버 측 IO API에 따라 다릅니다. 블로킹 API를 선택하면 연결 당 스레드가 생기고 3-4k 연결이 열려있는 메모리 문제가 발생합니다. 비 차단 API (거의 모든 애플리케이션 서버에 NIO 기능이 있음)를 선택하면 수백만 개의 열린 연결을 유지할 수 있습니다. –

+1

당신은이 흥미로운 것을 발견 할 수 있습니다 - http://iobound.com/2008/11/comet-nio/ –

2

@Vasil :

가보고 to this problem

그리고 IO를 통해 NIO의 the false superiority 관련을 가지고 "당신이 열 연결의 수백만을 유지할 수 있습니다."

iobound 기사에서는 IO가 NIO보다 성능이 뛰어나다는 것을 보여 주며, 예 IO는 NIO 이전에 메모리가 부족합니다 (단, 작성자는 스택 메모리를 더 낮은 값으로 줄이려고하지 않았습니다).