문제

웹 페이지에 실시간 업데이트를 표시하고 싶습니다 (외부 프로세스에 의해 변경되는 데이터베이스 테이블의 상태 필드를 기반으로합니다). 내 연구를 바탕으로 여러 가지 방법이 있습니다.

  • 긴 여론 조사 (혜성) - 이것은 구현하기가 복잡한 것 같습니다.
  • 정기적 인 폴링 - AJAX 메소드가 현재 상태를 얻기 위해 5 초마다 데이터베이스를 눌러 트리거 할 수 있습니다. 그러나 나는 이것이 성능 문제가있을 것이라고 우려합니다.

그런 다음 사용에 대해 읽었습니다 SqlCacheDependency - 기본적으로 캐시는 테이블의 필드를 기반으로 무효화됩니다. 캐시가 무효화되어 사용자에게 새로운 업데이트를 표시 할 때 트리거 된 이벤트를 사용할 수 있다고 가정합니다.

성능 문제가없는 쉬운 솔루션은 무엇입니까?

도움이 되었습니까?

해결책

데이터베이스를 폴링하는 대신보다 확장 가능하고 성능이 뛰어난 접근 방식은 가벼운 JS 파일과 같은 웹 서버에 파일이 존재하기위한 설문 조사입니다. 파일의 내용은 중요하지 않지만, 당신에게 아이디어를 제공하기 위해서는 프로세스 결과를 더 자세히 설명하는 JSON 객체를 가질 수 있습니다.

그런 다음 최종 단계가 파일을 생성하거나 웹 계층에서 웹 서비스를 호출하여 웹 서비스를 호출 할 수 있으므로 처리를 수행하는 배경 프로세스.

작동하는 방법은 다음과 같습니다.

사용자는 서버에 게시하는 버튼을 누릅니다

프로세스의 서버 킥 및 식별자를 반환합니다. 예를 들어 C3201620-E622-4FE2-9F3A-E02FFA613F59

그런 다음 웹 UI는 C3201620-E622-4FE2-9F3A-E02FFA613F59.JS의 존재에 대해 페리드로 폴링합니다. JavaScript는 404 오류를 관리하고 200 개를받을 때까지 계속 재 시도합니다.

이것이 당신에게 몇 가지 아이디어를 제공하기를 바랍니다.

jQuery에서 404를 처리하는 코드 예제

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 

다른 팁

두 가지 문제가 있습니다.

  1. 푸시 할 데이터를 검색합니다
  2. 데이터를 클라이언트에게 푸시합니다

항목 #1은 상당히 효율적인 쿼리가 있다고 가정하면 쉽고 모든 사용자에게 쿼리를하지는 않습니다. 그냥 쿼리하고 데이터를 가져 와서 푸시하십시오. sqldependency 옵션을 사용하거나 투표 할 수 있습니다. 데이터가 얼마나 무거웠는지에 따라 다릅니다.

항목 #2는 서버에 지속적으로 도망 치거나 혜성 서버를 사용해야하기 때문에 약간 까다 롭습니다. 우리는 확장 가능한 .NET Comet Server를 작성했습니다. WEBSYNC,이 법안에 맞을 수있는 Frozen Mountain에서. 본질적으로, 귀하는 게시를 유도하는 별도의 프로세스가 있으며 WebSync는 데이터를 클라이언트에게 푸시하는 것을 처리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top