0

이것이 문제는 해결되었지만 google-fu는 충분하지 않다고 생각합니다.클라이언트에 범람하지 않고 업데이트 이벤트를 푸시합니다. 이것을하는 청결한 방법?

여러 항목의 상태를 추적하는 표가 있습니다. 서버는 원하는대로 클라이언트에 대한 변경 사항을 푸시 할 수 있습니다.

문제가 인 경우 마지막 업데이트가 5 초 미만이면 업데이트를 푸시하고 싶지 않습니다.

다른 이벤트 관리자 스레드를 만들지 않고 이것을 달성하는 가장 깨끗한 방법은 무엇입니까?

나의 현재 자상은 다음과 같습니다 : 그것은 대부분의 경우 충분 작동하지만, 분명히 마지막 업데이트 unpushed 남아있을 수

pushEvent(){ 
    Look up the last update time 
    if: last update less than 5 sec ago 
     then do nothing 
    else 
     pushToClients 
} 

.

이 작업을 수행하는 좋은 방법은 무엇입니까? 필자가 생각하는 몇 가지 방법 :

  1. 이 모든 푸시 (예를 들어 Thread.sleep를)에 내가 체크 업데이트가 이미 예약되었습니다 할 수 있는지 그 방법을 5 초 지연을 추가합니다. 이상적이지만 아무도 마음에 들지 않습니다.
  2. 푸시 한 다음 doNotPush = true로 설정하십시오. 타이머를 사용하여 false로 다시 설정하십시오.

감사합니다,

답변

0

서버에서, 당신은 키와 값 및 이벤트의하지만 수신자 (고객)와 같은 쌍 {current event, last sent event} 포함됩니다 HashMap를 사용할 수 있습니다. 그런 다음이 맵을 반복 할 예정인 주기적 작업을 사용하고 current event != last sent event인지 확인하고, 그렇다면 현재 이벤트를 클라이언트에 보내고 (last sent에 넣음)

하나의 단점은 클라이언트로 보내는 것이 느리면 나가는 큐에 이벤트가 걸릴 수 있다는 것입니다. 비동기로 전송하여이 문제를 해결할 수 있습니다 (예 : 이벤트를 오프로드하여 별도의 Executor로 전송).