2011-02-01 4 views
0

긴 폴링과 오페라에 문제가 있습니다. 나 자신은 c-programmer이며 우리의 필요에 맞게 사용자 정의 된 http-daemon을 개발했다. 이 경우 많은 양의 연결을 처리 할 수있는 긴 폴링 서버가 필요했습니다.Opera에서 긴 폴링 소켓을 엽니 다.

오페라는 사이트의 링크를 클릭 한 후에도 여론 조사를 열어두고 새로운 질문을 엽니 다. 우리는 iframe 내부에 자바 스크립트를 포함하려고하는 기본적인 long 폴링 기법을 사용합니다. 이것은 다른 브라우저에서도 잘 작동하지만 이전 설문 조사를 서버 측에서 강제 종료하더라도 오페라가 다시 열립니다. 트래픽이 많은 사이트에서는 오페라 사용자가 거의 없기 때문에 사이트를 클릭 할 때마다 새로운 긴 설문 조사가 열리기 때문에 오래된 파일 기술자가 없어지는 경우가 거의 없기 때문에 이것은별로 좋지 않습니다.). 페이지를 새로 고침해도 문제가 발생하지 않습니다. 긴 투표를 닫고 새 투표를 엽니 다. 오페라를 닫은 후에는 모든 파일 설명자가 닫히고 모든 것이 다시 정상적으로 처리됩니다.

그래서 http- 데몬에서 오페라에 대한 특정 헤더를 추가해야합니까, 아니면 자바 스크립트에 잘못된 것이 있습니까?

편집 : 버전을 사용하여 테스트 : 오페라/9.80 (X11, 리눅스 x86_64의를, U, EN) 프레스토/2.6.30 버전/

+0

어딘가에 실제 코드를 게시 할 수 있습니까? 정확한 예가 없으면 분석하고 제안하는 것이 어렵습니다. – karlcow

+0

Opera 11에서 작동합니까? – karlcow

답변

0

10.63 우리는 기본 롱 폴링 기술을 사용하는 iframe이 내부 자바 스크립트를 포함하는 시도 .

따라서 해당 소켓이 iframe에 내용을 제공하고 있습니까?

페이지에서 클릭하면 오페라가 연결을 닫아야하는 것처럼 보입니다. 그러나 페이지를 떠날 때 명시 적으로 iframes을 파괴 시도 할 수 있습니다, 뭔가 같은 :

window.onbeforeunload = function() { 
    theIframe.parentNode.removeChild(theIframe); 
    theIframe = undefined; 
}; 

편집 (. 난 당신이 iframe을 참조 어딘가에 주위에 거짓말이 있다고 가정) 또는 심지어 탐색 다른 곳에서 먼저 iframe이 :

window.onbeforeunload = function() { 
    theIframe.src = "about:blank";    // <== New bit 
    theIframe.parentNode.removeChild(theIframe); 
    theIframe = undefined; 
}; 
+0

서버 쪽에서 소켓을 봅니다.) 다른 사이트로 이동하는 링크를 클릭하거나 오페라의 탭을 닫더라도 연결이 닫히지 않습니다. 긴 폴 연결은 오페라 프로세스를 닫을 때만 닫힌 것 같습니다. –

+0

@Antti : 이해합니다. 내가 말하는 것은 오페라가 당신이 iframe으로 끝났음을 인식하도록하기 위해 뭔가를 (심지어 더) 명백하게하려고하면 어떻게 될까요? 그것은 어쨌든 그들을 폐쇄해야합니다,하지만 ... –

+0

그래,해야합니다. 우리는 그것을 시도 할 것입니다. 우리의 자바 스크립트 녀석이 내가 비슷한 문제에 대해 이야기했을 때 비슷한 말을했다. :) –

0

글쎄, 나는 자바 스크립트를 수정하지 않고 .. 우리는 그것을 "작업"거 같아요. 나는 오페라에 대해 http-daemon의 특정 규칙을 만들었습니다. "403 Forbidden"으로 오래된 long poll에 응답합니다 (왜 전에 시도하지 않았습니까?). 이전 소켓에서 단순 close()가 오페라로 연결을 다시 엽니 다.

브라우저의 탭을 닫더라도 오페라가 긴 투표를 마감하지 않으면 우스꽝 스럽습니다. 오페라 전체 과정을 닫아야합니다.

관련 문제