2016-11-18 2 views
4

Я создаю очень основное приложение для чата. Моя цель - создать резервный сервер Rails API, а затем создать клиент IOS, Android, web и рабочий стол. Это чисто для изучения Websockets и мобильной разработки.Использование режима Actioncable и Rails 5 API вместе

Я никогда не использовал Actioncable, и мои знания о Websockets очень ограничены. Я хотел бы знать, могу ли я установить Actioncable в моем Rails API и связать его с узлом (например).

Действует ли Actioncable как любой другой веб-узел? Могу ли я подключиться к нему из моего приложения Node через ws://<host>/cable и иметь функциональную систему pub-sub между любым клиентом и Rails?

Мне очень жаль, если это не имеет смысла, я с трудом формулировка его :)

Спасибо!

+0

Мне интересно то же самое прямо сейчас. Выясните это? –

+0

Проверьте это: https://github.com/rails/rails/issues/22669 –

ответ

6

Действительно, вы можете!

  1. Так же, как вы создаете любой апи приложение, использовать генератор

    rails new my_app --api 
    
  2. Создать your_channel

    rails generate channel your_channel 
    
  3. Добавить путь монтирования в routes.rb

    mount ActionCable.server => '/cable' 
    
  4. Разрешить поток на подписываться метод в /app/channels/your_channel.rb

    class YourChannel < ApplicationCable::Channel 
    
        def subscribed 
        stream_from 'messages'  # <----- Stream Name Here 
        end 
    
        def unsubscribed 
        # Any cleanup needed when channel is unsubscribed 
        end 
    
    end 
    
  5. Вызов ActionCable.server.broadcast из любой другой части вашего приложения для потоковой передачи

    ActionCable.server.broadcast 'messages', message: 'ping' 
    
  6. Теперь использовать свой передний конец, чтобы проверить его. Так как вы сказали вы хотите IOS Android, а также упомянул о том узле, я предполагаю, что вы используете (или выбрал бы использовать)react-native

    import ActionCable from 'react-native-actioncable'; 
    const cable = ActionCable.createConsumer("ws://localhost:3000/cable"); 
    
    class YourReactClass extends React.Component { 
    
        # add or update the following 
    
        componentDidMount =() => { 
         console.log("componentDidMount executed"); 
         this.subscription = cable.subscriptions.create("OrderChannel", { 
          connected: function() { console.log("connected: action cable") }, 
           disconnected: function() { console.log("disconnected: action cable") }, 
           received: function (data) { console.log(data) } 
          } 
         ) 
        }; 
    
        componentWillUnmount() { 
         this.subscription && 
         cable.subscriptions.remove(this.subscription) 
        } 
    
    } 
    

И вы хорошо идти, строить свою логику вернемся к этому ... Если у вас возникнут проблемы, сообщите мне.

Смежные вопросы