Class: EM::APNS::ConnectionPool

Inherits:
Object
  • Object
show all
Defined in:
lib/em-apns/connection_pool.rb

Overview

simple connection pool using EM queue, default size 4

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConnectionPool

Returns a new instance of ConnectionPool.



7
8
9
10
11
12
# File 'lib/em-apns/connection_pool.rb', line 7

def initialize
  @pool_size = EM::APNS.pool || 4
  @connections = []
  @queue = EM::Queue.new
  @pool_size.times { add_connection }
end

Instance Attribute Details

#queueObject (readonly)

Returns the value of attribute queue.



5
6
7
# File 'lib/em-apns/connection_pool.rb', line 5

def queue
  @queue
end

Instance Method Details

#add_connectionObject



23
24
25
26
27
28
29
30
31
# File 'lib/em-apns/connection_pool.rb', line 23

def add_connection
  connection = EM.connect(EM::APNS.host, 2195, Connection)
  connection.on_unbind do |conn|
    @connections.delete(conn)
    EM.next_tick{ add_connection }
  end
  @connections << connection
  queue_worker_loop.call connection
end

#queue_worker_loopObject



14
15
16
17
18
19
20
21
# File 'lib/em-apns/connection_pool.rb', line 14

def queue_worker_loop
  proc{ |connection|
    @queue.pop do |notification|
      connection.send_data(notification)
      EM.next_tick { queue_worker_loop.call connection }
    end
  }
end