Class: Kameleoon::RealTime::RealTimeEventService

Inherits:
Object
  • Object
show all
Defined in:
lib/kameleoon/real_time/real_time_event_service.rb

Overview

RealTimeEventService is used for fetching updates of configuration (experiments and feature flags) in real time.

Constant Summary collapse

RECONNECT_DELAY_SECONDS =

Delay before re-establishing a failed SSE connection, so a persistent failure does not turn into a hot reconnect loop.

3

Instance Method Summary collapse

Constructor Details

#initialize(url, update_handler, sse_request_source = nil, reconnect_delay: RECONNECT_DELAY_SECONDS) ⇒ RealTimeEventService

Parametrized initializer.

is synchronously called for gotten RealTimeEvent objects.

Parameters:

  • url (String)
  • update_handler (Callable[Kameleoon::RealTime::RealTimeEvent] | NilClass)

    Handler which

  • reconnect_delay (Numeric) (defaults to: RECONNECT_DELAY_SECONDS)

    Delay in seconds before a reconnect attempt.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/kameleoon/real_time/real_time_event_service.rb', line 30

def initialize(url, update_handler, sse_request_source = nil, reconnect_delay: RECONNECT_DELAY_SECONDS)
  @url = url
  @update_handler = update_handler
  @need_close = false
  @headers = {
    'Accept': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'Keep-Alive'
  }
  @sse_request_source = sse_request_source
  @reconnect_delay = reconnect_delay
  @sse_thread = nil
  @sse_client = nil
  create_sse_client
end

Instance Method Details

#closeObject

Closes the connection to the server.



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/kameleoon/real_time/real_time_event_service.rb', line 48

def close
  return if @need_close

  Logging::KameleoonLogger.info('Real-time event service is shutting down')
  @need_close = true
  return if @sse_thread.nil?

  @sse_thread.kill
  @sse_thread = nil
  @sse_client&.call_close_handler
end