Class: Up::UWebSocket::Cluster
- Defined in:
- lib/up/u_web_socket/cluster.rb
Instance Method Summary collapse
-
#initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil, logger: Logger.new(STDERR), workers: nil) ⇒ Cluster
constructor
A new instance of Cluster.
- #listen ⇒ Object
- #publish(channel, message) ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil, logger: Logger.new(STDERR), workers: nil) ⇒ Cluster
Returns a new instance of Cluster.
13 14 15 16 17 |
# File 'lib/up/u_web_socket/cluster.rb', line 13 def initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil, logger: Logger.new(STDERR), workers: nil) super(app: app, host: host, port: port, scheme: scheme, ca_file: ca_file, cert_file: cert_file, key_file: key_file, logger: logger) @workers = workers || `num_workers` @members = [] end |
Instance Method Details
#listen ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/up/u_web_socket/cluster.rb', line 19 def listen raise "already running" unless @members.empty? ::Up.instance_variable_set(:@instance, self) %x{ if (cluster.isPrimary) { cluster.on('message', (worker, message, handle) => { if (message.c && message.m) { for (let member of #@members) { if (member !== worker) { member.send(message); } } } }); for (let i = 0; i < #@workers; i++) { #@members[i] = cluster.fork(); } } else { #@worker = true; function process_message_handler(message, handle) { #@server.publish(message.c, message.m); } process.on('message', process_message_handler); #{super} } } end |
#publish(channel, message) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/up/u_web_socket/cluster.rb', line 47 def publish(channel, ) %x{ if (!message.$$is_string) { message = JSON.stringify(message); } if (#@worker ) { #@server?.publish(channel, message); process.send({c: channel, m: message}); } else if (#@members) { for (let member of #@members) { if (member !== worker) { member.send(message); } } } } true end |
#stop ⇒ Object
66 67 68 69 70 71 |
# File 'lib/up/u_web_socket/cluster.rb', line 66 def stop if Up::CLI::stoppable? @members.each { |m| `m.kill()` } @members.clear end end |