Wie zu verwenden ActionCable als API
Baute ich eine sehr einfache app mit Schienen 5 beta 1 und ActionCable anzeigen, wenn Benutzer online und lassen Sie Sie sich gegenseitig Nachrichten schicken.
Nun, ich würde grundsätzlich gerne den client-seitigen Teil der ActionCable, implementieren Sie es in den Kontext einer anderen app (das tut nicht auf Schienen laufen 5) und verbinden Sie es mit der ersten app zum senden und empfangen von Daten (z.B. der online-status von Nutzern oder Nachrichten).
Senden Daten aus, die zweite app, ich nehme an, ich kann einfach machen, einen AJAX-POST-request. Die Frage ist: Wie abonniere ich von meiner zweiten app, um eine offene Verbindung von der ersten app?
Oder auch: Wie abonniere ich den ActionCable Verbindung meiner Rails-app aus einer anderen app über die API?
Meine Vermutung ist, das ich im wesentlichen möchte diese coffeescript irgendwie in meine zweite app:
App.appearance = App.cable.subscriptions.create "AppearanceChannel",
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
# ...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie im wesentlichen brauchen, um eine Kopie oder ein port von der ActionCable JS-code in Ihrer app (https://github.com/rails/rails/tree/master/actioncable/app/assets/javascripts).
Update: ich habe kürzlich ein npm-Paket namens actioncable-js bietet einen direkten port der Ruby on Rails-5 ActionCable CofeeScript standard-JS für den Einsatz außerhalb der Schienen: https://github.com/mwalsher/actioncable-js
Weil ActionCable ist nur eine Schicht auf der Oberseite von HTML5 WebSockets, also man kann auch mit raw-WebSockets JS-code (oder einem beliebigen Drittanbieter-Bibliothek) zur Verarbeitung der Mitteilungen.
Den ActionCable message-Protokoll ist etwas hier dokumentiert: https://github.com/NullVoxPopuli/action_cable_client#the-action-cable-protocol. Ich werde fügen Sie unten für die Bequemlichkeit:
Nachdem die Verbindung erfolgreich ist, senden Sie eine subscribe-Nachricht
{"command":"subscribe","identifier":"{\"channel\":\"MeshRelayChannel\"}"}
{"identifier"=>"{\"channel\":\"MeshRelayChannel\"}", "type"=>"confirm_subscription"}
Einmal abonniert haben, können Sie Nachrichten senden.
{"command":"message","identifier":"{\"channel\":\"MeshRelayChannel\"}","data":"{\"to\":\"user1\",\"message\":\"hello from user2\",\"action\":\"chat\"}"}
Hinweise:
identifier
unddata
sind Redundant jsonified.So, zum Beispiel (in ruby)
MeshRelayChannel
mitsocket.io-client
?Während mwalsher die Lösung war sehr hilfreich für mich, vor kurzem fand ich einen pull-request auf der Rails-repository mit einer offiziellen Lösung auf meine Frage.
https://github.com/rails/rails/pull/24991
Ich gehe davon aus, in Naher Zukunft Hinzugefügt werden, um die Haupt-Dokumentation. Hier ist der link zu der offiziellen actioncable npm-Paket: https://www.npmjs.com/package/actioncable
Können Sie es verwenden, ähnlich mwalsher Lösung mit beliebigen JS app. Installieren Sie einfach die npm-Paket:
Hier das JS-Beispiel aus der Dokumentation:
Edit: Den pull-request zusammengeführt wurde für eine Weile jetzt, und die Beschreibung ist Teil des offiziellen Readme - nur noch nicht in der Rails-Guides.