diff options
author | Jeremy Daer <jeremydaer@gmail.com> | 2016-03-03 16:12:55 -0700 |
---|---|---|
committer | Jeremy Daer <jeremydaer@gmail.com> | 2016-03-03 16:12:55 -0700 |
commit | 211fd1b5f524fa8105bdc5166a747becac2b01e3 (patch) | |
tree | 4534ae4c9a14b87f711866265609e6529a13353e /actioncable/app | |
parent | daeaac702795f2ab6bb882abef1a349b1b799b22 (diff) | |
parent | 82a1bf268d289cd647f681ce5c92c6b1efedd816 (diff) | |
download | rails-211fd1b5f524fa8105bdc5166a747becac2b01e3.tar.gz rails-211fd1b5f524fa8105bdc5166a747becac2b01e3.tar.bz2 rails-211fd1b5f524fa8105bdc5166a747becac2b01e3.zip |
Merge pull request #24036 from javan/actioncable-lazy-connect
Action Cable: Establish WebSocket connection when first subscription is created
Diffstat (limited to 'actioncable/app')
3 files changed, 10 insertions, 9 deletions
diff --git a/actioncable/app/assets/javascripts/action_cable/connection.coffee b/actioncable/app/assets/javascripts/action_cable/connection.coffee index 25793ea3d3..9be5cdf5fb 100644 --- a/actioncable/app/assets/javascripts/action_cable/connection.coffee +++ b/actioncable/app/assets/javascripts/action_cable/connection.coffee @@ -8,9 +8,6 @@ class ActionCable.Connection constructor: (@consumer) -> send: (data) -> - unless @isOpen() - @open() - if @isOpen() @webSocket.send(JSON.stringify(data)) true @@ -18,7 +15,7 @@ class ActionCable.Connection false open: => - if @isAlive() + if @isActive() ActionCable.log("Attemped to open WebSocket, but existing socket is #{@getState()}") throw new Error("Existing connection must be closed before opening") else @@ -33,7 +30,7 @@ class ActionCable.Connection reopen: -> ActionCable.log("Reopening WebSocket, current state is #{@getState()}") - if @isAlive() + if @isActive() try @close() catch error @@ -47,10 +44,10 @@ class ActionCable.Connection isOpen: -> @isState("open") - # Private + isActive: -> + @isState("open", "connecting") - isAlive: -> - @webSocket? and not @isState("closing", "closed") + # Private isState: (states...) -> @getState() in states diff --git a/actioncable/app/assets/javascripts/action_cable/consumer.coffee b/actioncable/app/assets/javascripts/action_cable/consumer.coffee index 717c0641a9..3d93d40b99 100644 --- a/actioncable/app/assets/javascripts/action_cable/consumer.coffee +++ b/actioncable/app/assets/javascripts/action_cable/consumer.coffee @@ -23,3 +23,7 @@ class ActionCable.Consumer send: (data) -> @connection.send(data) + + ensureActiveConnection: -> + unless @connection.isActive() + @connection.open() diff --git a/actioncable/app/assets/javascripts/action_cable/subscriptions.coffee b/actioncable/app/assets/javascripts/action_cable/subscriptions.coffee index 2443bca14a..9d93b462a7 100644 --- a/actioncable/app/assets/javascripts/action_cable/subscriptions.coffee +++ b/actioncable/app/assets/javascripts/action_cable/subscriptions.coffee @@ -19,6 +19,7 @@ class ActionCable.Subscriptions add: (subscription) -> @subscriptions.push(subscription) + @consumer.ensureActiveConnection() @notify(subscription, "initialized") @sendCommand(subscription, "subscribe") @@ -59,4 +60,3 @@ class ActionCable.Subscriptions sendCommand: (subscription, command) -> {identifier} = subscription @consumer.send({command, identifier}) - |