Ruby on Rails 5.2 - ActionCable::Server::Base

क्लास एक्शनकेबल :: सर्वर :: बेस




ruby

क्लास एक्शनकेबल :: सर्वर :: बेस

जनक:
Object
शामिल मॉड्यूल:
ActionCable::Server::Broadcasting

एक एकल एक्शनकेबल :: सर्वर उदाहरण ActionCable.server के माध्यम से उपलब्ध है। इसका उपयोग एक्शन केबल सर्वर को शुरू करने वाली रैक प्रक्रिया द्वारा किया जाता है, लेकिन इसका उपयोग उपयोगकर्ता द्वारा RemoteConnections ऑब्जेक्ट तक पहुंचने के लिए भी किया जाता है, जिसका उपयोग सभी सर्वरों में कनेक्शन खोजने और डिस्कनेक्ट करने के लिए किया जाता है।

साथ ही, यह प्रसारण के लिए उपयोग किया जाने वाला सर्वर उदाहरण है। अधिक जानकारी के लिए ActionCable::Server::Broadcasting देखें।

गुण

म्यूटेक्स [R]

पब्लिक क्लास के तरीके

लकड़हारा () स्रोत दिखाएँ
# File actioncable/lib/action_cable/server/base.rb, line 17
def self.logger; config.logger; end
# File actioncable/lib/action_cable/server/base.rb, line 22
def initialize
  @mutex = Monitor.new
  @remote_connections = @event_loop = @worker_pool = @pubsub = nil
end

सार्वजनिक प्रवृत्ति के तरीके

# File actioncable/lib/action_cable/server/base.rb, line 28
def call(env)
  setup_heartbeat_timer
  config.connection_class.call.new(self, env).process
end

सर्वर सेटअप करने के लिए रैक द्वारा कॉल किया जाता है।

connection_identifiers () स्रोत दिखाएं
# File actioncable/lib/action_cable/server/base.rb, line 82
def connection_identifiers
  config.connection_class.call.identifiers
end

सभी पहचानकर्ता इस सर्वर से जुड़े कनेक्शन वर्ग पर लागू होते हैं।

डिस्कनेक्ट (पहचानकर्ता) दिखाएँ स्रोत
# File actioncable/lib/action_cable/server/base.rb, line 34
def disconnect(identifiers)
  remote_connections.where(identifiers).disconnect
end

RemoteConnections माध्यम से इस सर्वर या किसी अन्य पर पहचानकर्ताओं द्वारा पहचाने गए सभी कनेक्शनों को डिस्कनेक्ट करें।

# File actioncable/lib/action_cable/server/base.rb, line 57
def event_loop
  @event_loop || @mutex.synchronize { @event_loop ||= ActionCable::Connection::StreamEventLoop.new }
end
# File actioncable/lib/action_cable/server/base.rb, line 77
def pubsub
  @pubsub || @mutex.synchronize { @pubsub ||= config.pubsub_adapter.new(self) }
end

एडाप्टर का उपयोग सभी स्ट्रीम / ब्रॉडकास्टिंग के लिए किया जाता है।

# File actioncable/lib/action_cable/server/base.rb, line 53
def remote_connections
  @remote_connections || @mutex.synchronize { @remote_connections ||= RemoteConnections.new(self) }
end

RemoteConnections लिए प्रवेश द्वार। विवरण के लिए वह वर्ग देखें।

पुनः आरंभ () स्रोत दिखाएँ
# File actioncable/lib/action_cable/server/base.rb, line 38
def restart
  connections.each(&:close)

  @mutex.synchronize do
    # Shutdown the worker pool
    @worker_pool.halt if @worker_pool
    @worker_pool = nil

    # Shutdown the pub/sub adapter
    @pubsub.shutdown if @pubsub
    @pubsub = nil
  end
end
कार्यकर्ता_पुल () स्रोत दिखाएं
# File actioncable/lib/action_cable/server/base.rb, line 72
def worker_pool
  @worker_pool || @mutex.synchronize { @worker_pool ||= ActionCable::Server::Worker.new(max_size: config.worker_pool_size) }
end

कार्यकर्ता पूल वह है जहां हम कनेक्शन कॉलबैक और चैनल क्रिया चलाते हैं। हम सर्वर के मुख्य थ्रेड पर यथासंभव कम करते हैं। कार्यकर्ता पूल एक निष्पादक सेवा है जो एक कार्य कतार से काम करने वाले थ्रेड्स के पूल द्वारा समर्थित है। थ्रेड पूल का आकार डिफ़ॉल्ट रूप से 4 कार्यकर्ता थ्रेड्स पर अधिकतम होता है। अपने आप को config.action_cable.worker_pool_size साथ आकार ट्यून करें।

अपने चैनल कार्यों के भीतर सक्रिय रिकॉर्ड, रेडिस आदि का उपयोग करने का मतलब है कि आपको कार्यकर्ता पूल में प्रत्येक थ्रेड से एक अलग कनेक्शन मिलेगा। तदनुसार अपनी तैनाती की योजना बनाएं: 5 सर्वर प्रत्येक चल रहे 5 प्यूमा कार्यकर्ता प्रत्येक 8-थ्रेड वर्कर पूल चलाने वाले का मतलब है कम से कम 200 डेटाबेस कनेक्शन।

इसके अलावा, सुनिश्चित करें कि आपका डेटाबेस कनेक्शन पूल आकार आपके कार्यकर्ता पूल आकार जितना बड़ा हो। अन्यथा, श्रमिक डेटाबेस कनेक्शन पूल का निरीक्षण कर सकते हैं और ब्लॉक कर सकते हैं जब वे अन्य श्रमिकों को उनके कनेक्शन जारी करने की प्रतीक्षा करते हैं। इसके बजाय छोटे वर्कर पूल या बड़े डेटाबेस कनेक्शन पूल का उपयोग करें।