2011-12-29 3 views
4

내 웹 응용 프로그램의 백엔드에서 여러 클라이언트의 업데이트를 수신합니다. 이러한 업데이트가 발생하면 다른 모든 클라이언트와 통신해야합니다.백엔드 업데이트시 프런트 엔드에 데이터 전송

백엔드가 업데이트되면 어떻게 서버에서 모든 웹 브라우저 클라이언트로 업데이트를 시작할 수 있습니까?

JBoss, JSF 및 Spring 프레임 워크를 사용하고 있습니다.

+0

스프링 자체가 훌륭한 프레임 워크이지만, 스프링 (예 : EJB 및 CDI)과 직접 겹치는 기술이 이미 포함되어 있기 때문에 JBoss에서는 필요하지 않습니다. –

답변

6

DarthVader처럼 프론트 엔드가 일종의 (일반적으로) 상태 비 저장 HTML 페이지라고 가정합니다. 브라우저의 어떤 것.

혜성 :
혜성은 본질적으로 요청 시간 제한이없는 AJAX 요청을하고 모든 클라이언트가 자동으로 변경을 푸시하려는 경우, 당신은 세 가지 옵션이 있습니다. 당신은 요청을하고 거기에 앉아 필요한 데이터를 통해 데이터를 스트리밍합니다. 이것은 숨겨진 iFrames 또는 표준 XMLHTTPRequests (jQuery가 감쌀 수있는)로 수행 할 수 있습니다. 이 방법에 대한 자세한 내용은 here을 참조하십시오.

롱 폴링 :
는 기본적으로, 당신은 지속적으로 변경하여 서버를 폴링하기 위해 자바 스크립트 setInterval 방법을 사용합니다. 서버에 표준 AJAX GET 요청을하는 간격을 설정하기 만하면 성공할 때마다 적절하게 페이지를 업데이트하십시오.

HTML5의 WebSocket을 :
이벤트 기반 백엔드의 모든 종류 (트위스트, EventMachine, Node.js를, 등) 사용은 WebSocket을에게 이상적인 솔루션을합니다. 모든 클라이언트를 백엔드에 등록시키고 주어진 클라이언트로부터 제출할 때 모든 다른 클라이언트에 변경 사항을 푸시하십시오. this page에서 더 많은 웹 소켓을 읽을 수 있습니다.

1

프론트 엔드를 말할 때, 당신은 무 상태의 http 클라이언트에 대해 이야기하고 있습니다.

웹 서버에서 http 또는 상태 비 저장 클라이언트로 아무 것도 보낼 수 없습니다.

주기적으로 프런트 엔드에서 백 엔드까지 비동기 호출을 사용하는 경우이를 수행하는 "트릭".

Gmail에 대해 생각해 보면 새 이메일을받을 때 이메일을 받았음을 어떻게 생각합니까? 브라우저는 계속해서 Asynch 호출을 Gmail 서버로 보냅니다. 새 메시지가있는 경우 표시합니다.

그래서 클라이언트는 stateless입니다. Ajax를 사용하십시오.

이 부분이 분명합니까?

0

는 .. 그것은 미래에 있어야하는 방법이 지금은 기본적으로 서버에 요청을 보내는 Comet와 함께 붙어 들어 Websockets

같은 기준을 따르고이 문제를가는 몇 가지 방법이 있습니다 그것을 열어 두어 (응답을 신호하지 않음) 데이터를 스트리밍합니다 (그들이 요청하는 요청을 보류). 또는 정기적 인 폴링. 서버에 새로운 AJAX 요청을하면 미리 정의 된 간격마다 서버에 새로운 내용이 있는지 묻습니다. 말할 것도없이 첫 번째 해결 방법은 서버와 브라우저 모두에서 스트리밍 지원이 필요하지만 대부분의 시나리오에서 더 효율적입니다.

관련 문제