2010-01-28 3 views
1

나는 jQuery에 대해 growl과 같은 플러그인을 사용하여 사용자에게 라이브 메시지를 보내 사이트에서 활동을 공유합니다. 지금은 사이트에서 사용자가 마지막으로 액세스 한 이후에 발생한 알림으로 만 사용자를 업데이트합니다. 그러나 사이트에서 여러 개의 탭을 열었을 때 다른 탭이 가져 오기 전에 탭이 알림을 플러시 할 수 있으므로 긴 폴링 요청으로 인해 일부 탭만 알림을받습니다.실시간 알림을 추적하여 사용자에게 보낼 수있는 가장 좋은 방법은 무엇입니까?

각 탭에서 동시에 메시지를 표시하는 알림 시스템을 구현하는 가장 좋은 방법은 무엇입니까? 또한 사용자가 다른 페이지로 이동하더라도 15 초 동안 알림이 페이지에 남아 있도록 지속성 수준을 유지하는 것이 좋습니다.

감사합니다.

+0

[Comet and jQuery] 가능한 복제본 (http://stackoverflow.com/questions/136012/comet-and-jquery) –

답변

0

window.localStorage 개체를 탭/창간에 공유되는 알림 용 버퍼로 사용할 수 있습니다. 브라우저 간 호환성을 보장하려면 localStorage를 직접 처리하는 대신 store.js 라이브러리를 사용할 수도 있습니다.

웹 소켓 또는 다른 방법으로 클라이언트에 알림을 보낼 수 있으며 처리기가이를 버퍼로 푸시합니다. 당신이 창을 사용할 수있는 각 창에서

{ 
    wnd_<timestamp_of_window1_onload_event>: 1 
    wnd_<timestamp_of_window2_onload_event>: 1 
} 

(탭) : 사용자가 같은, 그것을 열 때이 로컬 스토리지에 등록해야

[ 
    notification1, 
    notification2 
    // etc. 
] 

각 창 (탭)와 같은 배열 될 말 새로운 알림을 위해 N 밀리 초마다 버퍼를 검사하는 .setInterval 함수. setInterval에 의해 호출되는 함수는 buffer에서 새로운 알림을 읽고 표시합니다. window.onbeforeunload 핸들러에서 localStorage의 windows 컬렉션에서 현재 윈도우를 등록 취소합니다. 그리고 현재 윈도우가 등록 해제 된 후에 윈도우 컬렉션이 비어 있다면, 통지 버퍼를 비울 수 있습니다. 물론 간단합니다. 어쩌면 모든 창을 닫기 전에 버퍼에서 삭제 된 (모든 창에서 처리 한) 알림을 삭제하는 것에 대해 생각해야 할 것입니다.