4

저는 Comet 용 실질적인 클라이언트 측 (JavaScript) 구현을 생각해 내려고합니다. http://en.wikipedia.org/wiki/Comet_(programming)) 이론에 대해 이야기하지만, 작동하는 구현을 찾으려고 힘든 시간을 보내고 있습니다. 여기에는 좋은 서버 측 요구 사항도 있지만 클라이언트 쪽 부분에만 관심이 있다는 것을 알고 있습니다.혜성을위한 클라이언트 측 기술

는 특히 내가 대답하려고 질문입니다 -

  1. 가 어떻게 연결이 성공적으로 이루어 을하고있다 것을 자바 스크립트에서 감지 않습니다. 예를 들면. 스크립트 태그 긴 폴링 방법을 사용하고 브라우저가 서버에 연결할 수없는 경우 어떻게 알 수 있습니까?
  2. 긴 폴링에서 서버의 응답이없는 경우 브라우저가 결국 "요청 시간 초과"상태가됩니다. 어떻게 자바 스크립트에서이를 감지하고 긴 설문 조사를 다시 설정합니까?
  3. 내 기술이 브라우저에서 작동하도록하려면 어떻게해야합니까? 기본적으로 은 이 대부분의 브라우저를 포괄하는 메소드 (스크립트 태그, xhr 등)의 올바른 조합을 알고 싶습니다.

나는 Comet 프레임 워크를 찾았지만 발견 한 모든 프레임 워크 (CometD, Atmosphere) 등은 서버 측 구현과 함께 제공되며 클라이언트 측 거래를 사용자에게 투명하게 만듭니다. 그러나 나는 그들이 클라이언트 측의 위업을 어떻게 달성했는지 알아 내려고 노력 중이다. 내 자신의 서버 구현 및 프로토콜 있습니다.

감사합니다.

1) 즉시 오류를받지 않고 연결을 만들 수 있다면, 당신은 좀 연결이 설정되었다고 가정 할 다음

+0

이들은 사람들이 잠시 동안 대답하려했던 큰 질문입니다. 행운을 빕니다! – Kristian

답변

1

우리 회사는 이러한 문제를 해결하는 방법입니다. 응답을 즉시받지 못하면 (나쁜 또는 그렇지 않은 경우) 클라이언트 측에서 힘든 관리 작업을 수행한다고 가정해야하므로 순서 ID를 지능적으로 사용하는 것이 중요합니다.

2) 바로 다시 시도하십시오. 일반적으로 서버는 클라이언트가 수행하기 전에 시간 초과되어 오류 코드를 보내 사용자에게이를 알려줍니다. 서버 측에서는 설문 조사 시간에 20 초 정도의 합리적인 것을 사용해야합니다.

3) 동일한 서비스의 시스템에 대한 다른 요청과 jsonp를 사용하여 다른 도메인 이름으로 가야합니다. 예를 들어 example.com에서 페이지를 호스팅하는 경우 chat.example.com 하위 도메인을 사용하는 것이 일반적입니다. 대부분의 브라우저는 한 번에 3 ~ 4 개의 열린 연결 만 동일한 도메인 이름으로 허용하기 때문입니다. Jsonp는 원산지 정책이 동일해야하기 때문에 필요합니다. 그 외 : 테스트, 테스트, 테스트.

라이언 달 (Node.js를의 창조자는) 매우 간단한 채팅 클라이언트/서버는 여기에 구현했습니다 : https://github.com/ry/node_chat

행운을 빕니다!

1
  1. 전송이 일종의 긴 폴링이면 사용자는이를 알 수 없습니다. 소켓 객체가 연결이 설정되었을 때 open 이벤트를 발생시키기 때문에 jQuery 소켓에서 긴 폴링 전송을 설계 할 때 동일한 문제가 발생했습니다. 따라서 서버가 서버에이 요청을 받아들이고 연결을 설정한다는 사실을 알리기 위해 서버가 첫 번째 긴 폴링 요청을 수락하면 서버가 즉시 응답해야한다는 규칙을 추가했습니다.사용자의 정보를 위해 첫 번째 긴 폴링 요청이 지정된 제한 시간 내에 완료되지 않으면 소켓 개체가 close 이벤트를 발생시킵니다.

  2. @ Hersheezy의 답변에 동의합니다. 다시 시도하십시오.

  3. 시험은 답입니다. 전송 도구의 조합은 브라우저 앱과 서버 앱의 환경에 의존합니다. 예를 들어 IE6은 지원하지만 도메인 간 연결 및 모바일 장치는 지원하지 않을 경우 긴 폴링 전송을 사용할 필요가 없습니다. WebSocket, Server-Sent 이벤트 및 HTTP Streaming 전송을 사용하면 충분합니다. WebSocket 서버를 준비 할 여력이 없다면 적절한 전송은 Server-Sent Events 및 Streaming이 될 것입니다.

나는 자바 스크립트 라이브러리 agonastic 서버이며, 브라우저 기반 애플리케이션을위한 소켓을 제공하는 jQuery Socket을 만들어왔다. 아마 이것은 당신에게 도움이 될 것입니다. 현재 pre-alpha 버전이며 서버 측 처리를 다루는 문서를 작성하고 있습니다.

감사합니다.