2011-12-09 5 views
4

일부 MVC 뷰 페이지는 서버에서 일부 리소스를 가져온 후 30 초마다 새로 고쳐집니다. 나는 setTimeOut을 사용하여 비동기 적으로 서버에서 데이터를 가져오고 이전 데이터와 비교하고 변경된 경우 div 태그를 업데이트하는 javascript 메서드를 트리거했습니다. 이제 global.asax 클래스에서 타이머를 생성하고 application_start 이벤트에서 시작한 다음 타이머 경과 이벤트에서 데이터를 가져와 데이터가 변경된 경우에만 SignalR을 사용하여 모든 클라이언트에 보냅니다.SignalR 대 setTimeout

여기서 setTimeOut에 비해 SignalR을 사용하면 어떤 이점이 있습니까?

답변

5

이 경우 데이터가 변경되지 않은 경우 서버를 불필요하게 이동하지 않아도됩니다. SignalR을 사용하면 데이터가 변경된 경우에만 모든 클라이언트에 데이터를 브로드 캐스트 할 수 있습니다.

다른 장점은, SignalR이 사용자가 걱정할 필요없이 사용할 수있는 최상의 기술을 사용하여 서버에서 서버로 푸시한다는 것입니다. ASP.NET 4.5가 설치된 Windows 8 서버 (향후 고려 사항)에서 서버를 실행하는 경우 WebSockets이 될 수 있으며 클라이언트가 Chrome, Firefox 또는 Opera 인 경우 서버가 보낸 이벤트 또는 클라이언트가 IE 인 경우 Forever Frame이 될 수 있습니다. 어느 쪽이든, 당신은 그것에 대해 걱정할 필요가 없으며, SignalR이 당신을 위해 운송 관리를 담당 할 것입니다.

데이터가 저장된 위치와 업데이트 방법에 따라 타이머를 완전히 제거하고 변경된 모든 데이터를 모든 클라이언트에 즉시 브로드 캐스팅 할 수도 있습니다. 컨트롤러의 다른 액션 메소드에 의해 업데이트되면 거기에서 클라이언트로 브로드 캐스트됩니다. 다른 프로세스를 통해 DB에 직접 업데이트되는 경우 App_Start의 응용 프로그램에서 SQL 쿼리 알림을 설정하여 변경되었을 때 경고를 받고 그 시점에서 브로드 캐스팅 할 수 있습니다.

+0

감사합니다. Damian! 나는 데이터에 대한 적절한 핸들을 가지고 있지 않다. 다른 서버에있다. 그리고 가져온다면 내가 변경된 것인지 아닌지를 알게 될 것이다. 단지 타이머와 함께 가기로 결정했다. – Gokulnath

+0

차가움. 다른 서버에 있더라도 데이터가 변경 될 때 다른 서버가 보낼 수있는 웹 서비스 끝점을 앱에 설정할 수 있으며 웹 서비스 코드에서 모든 클라이언트에 브로드 캐스트를 수행 할 수 있습니다. 그러나 타이머가 맞는다면 괜찮습니다 :) System.Threading.Timer를 사용해야합니다. –

+1

데이터를 비교 한 후, Hub.GetClients () .javascriptMethod (msg)를 사용하여 브로드 캐스트합니다. 어쨌든 연결된 클라이언트가 있는지 찾을 수 있습니까? 클라이언트가 없으면 다른 서버에서 데이터를 가져 오는 것을 피할 수 있습니까? 표시되는 경우 setTimeout의 경우 사용자가 setTimeout이있는 페이지에있는 경우에만 데이터가 반입됩니다. – Gokulnath