2011-01-31 2 views
8

웹 응용 프로그램에 꽤 적극적인 "자동 새로 고침"기능을 구축해야합니다. 그것은 사진 갤러리의 일종이며 이미지는 AmazonS3에 저장되지만 이미지에 관한 데이터는 우리 자신의 데이터베이스에 저장됩니다. 나는 서버를 폴링하고 아약스 호출을 전송하여 업데이트 된 데이터를 가져온다. 나는이 방법으로 서버에 대한 부하에 대해 정말로 염려한다. 때로는 15 ~ 30 초마다 페이지를 업데이트해야합니다.Polling, Comet, WebSockets 등

저는 Comet에서 읽었으며이 "해킹"이 좋은 아이디어라고 팔리지 않았습니다. WebSockets가 도움이 될 것입니다.하지만 저는 너무 새롭고 지원되지 않는 것이 걱정됩니다. 즉, 자주 새로 고치고 매우 높은 사용자 기반의 잠재력을 가진 시스템을 설계하는 방법에 대한 권장 사항이 있습니까?

나는이 문제에 대해 더 많은 서버를 던지면서 최선의 접근 방법이라고 확신하지는 않습니다. 그리고 다른 누군가가 제안하기 전에는 웹 앱이 iPad에서 작동해야하기 때문에 Flex를 사용할 수 없습니다.

답변

7

웹 소켓은 상당히 좋은 선택입니다. 파이어 폭스 4와 오페라 11에서 WebSockets을 사용하지 못하게하는 것은 작업 그룹이 문제를 해결하는 초안을 발표하기 시작하기 때문에 일시적 일 가능성이 높습니다. 또한 web-socket-js 플래시 폴백은 기본 웹 소켓이 비활성화 된 브라우저에서도 계속 작동합니다. 또한 주목할만한 점은 iOS 4.2에 기본 웹 소켓이 있다는 것입니다. 따라서 기본 웹 소켓 + 폴백 (fallback)을 사용하면 WebSockets가 모든 곳에서 지원됩니다.

웹 소켓을 사용하는 경우 클라이언트를 폴링하는 대신 업데이트를 푸시하는 것이 좋습니다. 이렇게하면 클라이언트가 실수로 서버를 DDOSing하는 것을 방지 할 수 있습니다. 대기 시간은 클라이언트를 위해 올라갈 것이고 그 시점에서 서버 측에서 더 많은 리소스를 추가 할 수 있습니다.

서버 측 JavaScript가 궁금한 점이 아니라면 클라이언트와 서버가 자동으로 지원하는 최상의 전송을 선택하는 Nodejs WebSockets 프레임 워크 인 Socket.IO을 체크 아웃 할 수 있습니다 (네이티브 웹 소켓, 웹 소켓 폴백, 다양한 긴 폴링 옵션). 또한 클라이언트 측 라이브러리가 포함되어 있기 때문에 서버와 클라이언트 코드가 매우 유사하게 보입니다. Socket.IO에는 지금 당장 마음가짐이 꽤있는 것 같습니다.

루비 중심 인 경우 em-websockets을 확인하고 싶을 것입니다. Socket.IO와 em-websockets 모두 event'd 기반의 서버로 대역폭이 아닌 지연이 중요한 클라이언트를 매우 많이 허용합니다.

+0

+1 분명하고 설득력있는 설명과 대안 및 참고 자료, 감사합니다. – limist

+0

... Java 용 cometd를 사용해보십시오! 나는 그것을 매우 추천 할 수있다! – Karussell