2009-09-07 3 views
3

나는 동시에 여러 AJAX 요청을하는 페이지를 가지고있다. 그들은 Comet 모델을 사용하기 때문에 항상 서버로부터 더 많은 데이터를 기다리는 다중 HTTP 연결이 열려 있습니다. 앞으로 페이지가 복잡해지면 훨씬 더 많을 수도 있습니다. 너무 많은 연결을 여는 것이 걱정됩니다.동일한 페이지에서 많은 AJAX 요청을 "멀티플렉싱"할 수 있습니까?

"다중화"할 수있는 방법이 있는지 궁금합니다. 모든 요청이 전송되는 단일 연결을 가지며 메시지를 서버 및 클라이언트 측의 적절한 처리기 기능으로 라우팅합니다.

지금까지는 HTTP 요청을 만들고 데이터를 기다리기 시작했기 때문에 더 많은 요청 데이터를 보낼 수 있다고 생각하지 않았기 때문에 지금까지는이를 수행 할 방법을 찾지 못했습니다. 더 많은 데이터를 보내기 위해 다른 연결을 열기 전에 연결을 닫을 수 있지만 서버가 응답을 보내면 어떻게 될까요?

내가해야 할 일을하려고합니까?

답변

1

하나 이상의 연결을 열 수 없다고 생각하는 이유는 무엇입니까? 시도해 보았 니?

우리가 사용한 접근 방식은 개념적으로 두 개의 연결을 사용하는 것이 었습니다. 하나는 Comet 용이고 다른 하나는 모든 비동기 전달이 거기에 다중화되어 있기 때문에 여러 가지 메시지 종류가 도착했습니다. 요청/응답이 다른 요청에서 발생했습니다. 실제로 Comet을 추가로 사용하여 기존 Ajax 앱을 작성했습니다.

+0

하나 이상의 연결을 가질 수 있으며 이미 가지고있는 연결입니다. 예를 들어 10 개의 연결을 열면 브라우저 제한이 걱정되며 사용자는 내 페이지를 여러 번 열어 볼 수 있습니다. 그러나 요청 연결이 매우 짧기 때문에 응답 만 멀티플렉싱하는 것은 흥미로운 아이디어입니다. 흠 ... – EMP

0

동일한 하위 도메인에 2 개의 동시 요청 만 전송할 수 있다는 브라우저 개발자의 동의가 있습니다. 여러 AJAX 요청이 유용하지만 대기열을 염두에 두는 이유입니다. 한편 보안상의 이유로 단일 하위 도메인으로 제한된 JScript 호출. 이 제한을 통해 도약하는 작은 트릭

+0

2 개의 연결 제한이 anym ore을 보유하고 있는지 확실하지 않습니다. 이제 IE8의 경우 6입니다. http://msdn.microsoft.com/en-us/library/cc304129(VS.85).aspx (이전 버전의 IE에 대한 레지스트리 설정을 사용하여이 기능을 항상 변경할 수있었습니다.) 나는 Chrome이 스스로를 2로 제한한다고 생각하지 않습니다. Firefox, Safari 또는 Opera에 대한 확신이 없습니다. –

+0

@Dave Webb - AJAX 페이지를 시작하기 전에 웹 클라이언트에게 설정을 변경하도록 요청하는 경우 다소 골치 아픈 일입니다. 그래서 협약을 염두에 두었습니다. "최악의 상황에 대비" – Dewfy

0

내가 djna는 (적어도 나는이 같은 일이 생각 ) 설명하는 일을 결국 (예를 http://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/ '동적 스크립트 태그 해킹 "참조)가있다 : 하나가 Comet 스타일의 연결은 항상 열리고 응답은 계속 수신되지만 AJAX 요청은 새로운 연결을 사용하여 정상적으로 전송됩니다. 각 요청은 "작업 ID"로 즉시 반환되므로 (연결이 매우 수명이 짧음) 해당 "작업"에 대한 추가 데이터가 Comet 연결로 보내집니다. 이런 식으로 2 개의 AJAX 요청이 동시에 발생하지 않는 한, 주어진 시간에 최대 2 개의 연결이 있습니다. 이는 제 경우에는 발생하지 않습니다.

당연히 페이지를 한 번에 사용하는 클라이언트가 여러 명있을 수 있습니다. 따라서 어떤 작업 응답이 혜성 연결로 보내 져야하는지 파악하려면 "혜성 세션 ID"도 있습니다. 이 ID는 페이지가로드 될 때 생성되며 페이지 수명 동안 변경되지 않습니다. 작업을 생성하는 일반적인 AJAX 요청 후에 작업 ID와 세션 ID를 가진 매우 간단한 AJAX 요청을 보냅니다. 이것은 해당 작업을 세션과 연관시키고 해당 작업에 대한 모든 응답을 해당 세션 ID와 연관된 기존 연결에 보내도록 서버에 지시합니다.

물론 세션 ID를 초기 요청의 일부로 지정할 수는 있지만 서버 측의 각 AJAX 메소드가이를 알고 있어야하므로 별도로 유지해야합니다. 인프라의 일부.

관련 문제