2

연결된 클라이언트에 데이터 변경을 알리기 위해 ServiceStack을 RedisServerEvents 플러그인과 함께 사용하고 있습니다. 아파치/mod_mono/ServiceStack, 하나의 Redis 인스턴스, 그리고 HAProxy 머신을 실행중인 두 개의 Linux VM이 있습니다.ServiceStack RedisServer 수천 개의 키를 만드는 이벤트

내가 알아 차 렸던 사실은 현재 소프트웨어를 테스트하는 데 적어도 6 명의 활성 사용자가 있지만 (적어도 SSE를 사용하는 부분 만), Redis 인스턴스에는 "sse : id"로 시작하는 수천 개의 키가 있습니다 ... ". 모두 TTL -1입니다. Redis 인스턴스에서 모든 키를 지울 수 있으며 시간이 지남에 따라 키 수가 천천히 올라갑니다.

내가 알아 내려고하는 것은 : 이것은 예상되는 동작입니까? ServiceStack 또는 고객에게 필요한 조치가 있습니까?

답변

1

구독을 제거하면 removing the users subscription info이어야합니다. 그러나 AppDomain/Web App가 종료되면 기존 구독을 정리하지 않습니다. 방금 commit을 추가했는데 AppDomain이 종료되는 동안 남아있는 모든 활성 구독을 정리하려고 시도하지만 깨끗하게 종료되지 않은 경우 구독이 남아있을 수 있습니다. 당신은 시작에 Reset()를 호출 할 수있는 경우

이전 구독을 취소하는 방법, 예를 들어,

참고 :이 기능은 서버에 활성 가입이 이루어지기 전에 실행해야합니다. 그렇지 않으면 제거됩니다.

이 변경 사항은 v4.5.7에서 사용할 수 있으며 지금은 available on MyGet입니다.

+0

유효한 구독이 있다고 생각되는 서버 이벤트 클라이언트는 Reset()이 호출되면 예외가 발생한다고 가정하는 것이 합리적입니까? – SeanH

+0

@SeanH'Reset()'이 호출되면 (단지 자동으로 상태를 제거함), SSE 클라이언트는 하트 비트를 보내려고 할 때 예외를 수신하게됩니다. – mythz

+0

소리가 좋다 ... 전성기를 잡아서 재 구독/필요에 따라 새 SSE를 만들 정도로 쉽기 때문에 업무 시간 중에 업데이트 할 수 있습니다 .-) – SeanH