0

우리는 스크린 샷을 보내는 것을 기반으로 C++에서 screen sharing application이라고 썼습니다.서블릿을 사용하여 서버에서 클라이언트로 인터럽트 구동 통신을 수행하는 방법은 무엇입니까?

서버와 클라이언트간에 TCP 연결을 설정하여 서버가 연결을 통해 사용자에게 수신 된 모든 새 스크린 샷을 전달하는 방식으로 작동하며 클라이언트가이를 팝업합니다.

이제 우리는 이것을 Google 애플리케이션 엔진에서 호스트하려고하므로 HTTP 요청을 통해 전달을 구현하려면 서버 코드를 'servlet' -ize 및'sandbox '해야합니다.

나는 다음과 같이 삽니다. 1. 스크린 샷을 다중 데이터 형식으로 게시하십시오 (apache uploads ..). 하지만 이제는 서버가 스크린 샷을 보내거나 전달하기 위해 지정된 클라이언트 (로그인 한 사용자)에게 연락해야합니다. 서블릿에서 클라이언트로 연결을 시작하는 방법을 잘 모르겠습니다. 클라이언트는 물론 서블릿 환경을 실행하지 않습니다. HTTP 1.1 mantains는 TCP 연결을 알고 있지만 gapps가 사용하지 못하는 것 같습니다.

1 개의 접근 방법은 로그인 할 때마다 로그인 한 모든 사용자에게 CONTINUE 100을 보내고 도착한 스크린 샷으로 응답하는 것입니다. 고객은 수령시 다른 요청을합니다. (브라우저의 새로 고침 헤더를 설정하지 않아도 됨) 앱 풀을 정기적으로 (5 초마다) 가질 수 있습니다.

답변

1

당신은 GAE에서 이것을 효과적으로 수행 할 수 없을 것입니다.

문제 1 : All output is buffered until your handler returns.

문제 2 : Quotas & Limits:

일부 기능 시스템의 안정성을 보호하기 위해 할당량 관련이없는 한계를 부과. 예를 들어 응용 프로그램이 웹 요청을 처리하도록 호출되면 30 초 이내에 응답 을 발행해야합니다. 응용 프로그램 의 처리 시간이 너무 오래 걸리면 프로세스가 으로 종료되고 서버에서 오류 코드를 사용자에게 반환합니다. 요청 시간 제한은 동적이며, 자원을 보존하기 위해 요청 처리기가 시간 초과에 자주 도달하면 이 단축 될 수 있습니다.

혜성 지원은 product roadmap에 있지만 나에게도 응용 프로그램은 여전히 ​​GAE 응용 프로그램에 적합하지 않은 것처럼 보입니다.

+0

Java EE 컨테이너 내의 GAE 옆에있는 HTTP 요청/응답을 통해 예상되는 동작을 어떻게 달성 할 수 있습니까? – simpatico

+0

다음은 시작에 도움이되는 기사입니다. http://www.ibm.com/developerworks/web/library/wa-cometjava/index.html GAE가 아닌 Java로 태그 된 새 질문을 할 수 있습니다. – cope360

0

Long 폴링은 서버와 클라이언트 간의 비동기 통신에 사용되는 개념입니다. Long Polling에서 서블릿은 클라이언트 및 관련 메시지의 맵을 유지합니다. Map의 키는 클라이언트 ID와 값으로 클라이언트에 보낼 메시지의 목록입니다. 클라이언트가 서버와의 연결을 열 때 (서블릿에 요청을 보내는 경우) 서블릿은 전송할 메시지가 있는지를 확인합니다. 발견되면 메소드에 대한 클라이언트 종료 메시지를 보냅니다. 메시지를 수신하면 클라이언트는 서버에 대한 새 연결을 엽니 다. 서블릿이 주어진 클라이언트에 대한 메시지를 찾지 못하면 지정된 클라이언트에 대한 메시지로 맵이 업데이트 될 때까지 대기합니다.

+0

롱 폴링은 이유 때문에 GAE에서 작동하지 않습니다. @ cope360의 답변 (문제 2) – naikus

+0

을 언급하는 것을 잊었습니다. 대답은 simpatico의 의견에 대한 응답이었습니다. –

0

이것은 늦은 답변이지만, Google이이 요구 사항에 대한 답변을 가지고 있다고 생각합니다 : the Channel API.

관련 문제