ActionController :: Live 및 스트리밍 알림을 사용자에게 사용하는 것과 관련하여 몇 가지 질문이 있습니다.Rails 4 라이브 스트림 + 구독 기반 업데이트
- 스트림이 닫혀 있거나 더 이상 쓸 수없는 경우를 알 수있는 방법이 있습니까?
- 작업 중에 수동으로 스트림을 닫아야하는 이유가 있습니까? 명시 적으로 스트림을 닫을 몇 가지 예를 보았지만 브라우저를 보면서 그것이 나를 위해 처리하는 것 같습니다.
내 작업을 구독 할 수있는 사용자 알림 클래스가 있습니다. 내 사용자 컨트롤러의 생성 작업에서 알림 클래스에 새 사용자를 브로드 캐스트하도록 지시합니다.
이 작업을 용이하게하기 위해 스트림을 열어 두어야했습니다. 또한 스트림이 닫힐 때 (브라우저를 시작하여 알 수 없음) 사용자 알리미를 구독 취소 할 시점을 알 수 없습니다. 그것은 블록은 트리거의 것에 뭔가가 UserNotifier에 브로드 캐스트 메시지를 트리거하면
#EventsController
def users
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream)
sse.write({}, event: :init)
UserNotifier.sub { |user| sse.write({ name: user.name, id: user.id }, event: :new_user) }
end
그래서 이것은 단지 다음 열고 영속적 인 연결을 잎, 하나는 자막도.
유일한 문제는 구독 취소시기를 알 수없고 내 블록에서 명시 적으로 sse.write (응답 스트림 줄 바꿈)를 호출하는 것을 볼 수 있다는 것입니다. 차례로 맹목적으로 stream.write를 모르고 지위.
업데이트는
나는 어떤 사람들은 클라이언트가 연결되었을 때 알 수있는 방법 같은 IOError 예외를 구출 나타났습니다. 그게 가장 좋은 방법인가요?
rescue IOError
UserNotifier.unsub(...)
...