Клиент Websocket для ActionCable в приложении Rails API

Мне нужно использовать Websocket в моем приложении Rails API (только). Отрисовки страниц на стороне сервера нет. Приложение представляет собой серверную часть только для JSON для Angular и Xamarin. Я видел, что многие учебники используют coffescript в качестве клиента ActionCable внутри Rails, но это не мой случай.

Вопрос в том, как использовать ActionCable только как API, за пределами кофескрипта Rails, например, для клиентов Android, iOS, Angular и React?

Я нашел разные и полезные ресурсы, но я все еще немного смущен.

1: использование ActionCable для Rails API - это кажется лучшим, но как я могу найти все команды JSON, которыми обмениваются фреймворк ActionCable?

2: Похожий вопрос на шахту

3: Rails API Websocket GEM - хорошо, не ActionCable, а этот парень скомпилировал coffescript в JS и портировал его в проект. Бесполезно для мобильной разработки.

Если есть другие решения или лучшие знания, пожалуйста, сообщите мне. Мне нужно «взломать» это, чтобы заставить его работать.

EDIT: я также нашел этот репозиторий action-cable-js а как его интегрировать?


person Marco Sanfilippo    schedule 20.08.2017    source источник
comment
Будет ли возможно использование веб-сокетов без ActionCable? если это так, обратите внимание на iodine gem. Это также должно значительно улучшить производительность (по сравнению с ActionCable).   -  person Myst    schedule 09.09.2017
comment
@Myst, спасибо за ответ. Стратегия не так проста, потому что серверная часть состоит из N контейнеров для Rails, нагрузка которых балансируется Nginx. Итак, есть один (или, может быть, M, сбалансированный по нагрузке) отдельный сервер ActionCable, работающий как автономный сервер. В этом случае я думаю, что iodine или ActionCable — это вопрос производительности, но мне нужно перепроектировать все приложение. Я проверю драгоценный камень глубоко. Спасибо!   -  person Marco Sanfilippo    schedule 11.09.2017


Ответы (2)


Я надеюсь, что мой ответ может быть полезен для всех. Наконец я обнаружил библиотеку под названием actioncable-js, которая помогла мне в проекте Angular.

Но этого недостаточно. Для мобильных проектов мне нужно использовать команды «низкого уровня» для взаимодействия с сервером Action Cable.

Протокол находится здесь: протокол.

Но если вам нужно больше, вы должны заглянуть глубоко внутрь драгоценного камня.

person Marco Sanfilippo    schedule 22.08.2017

Actioncable для API имеет официальную поддержку, и есть этот npm-пакет под названием actioncable, который отделил поддержку связь с сервером actioncable с использованием только подхода API.

npm install actioncable

затем в вашем реагирующем/угловом коде

import ActionCable from 'actioncable';

# create a connection with the actioncable server
# use ws:// for http and wss:// for https
const cable = ActionCable.createConsumer("ws://your-backend-server.com/cable");
# now you create a subscription
my_subscription = cable.subscriptions.create("MessengerChannel", {
  connected: function() {
    console.log("You've subscribed to the Messenger Channel");
  },
  disconnected: function() {
    console.log("You've disconnected from the Messenger Channel");
  },
  received: function (received_data) {
    # broadcast data from the Messenger channel is received here
    console.log(received_data);
  }
})

С тыльной стороны нужно смонтировать actioncable, для этого делаем так

# routes.rb file
Rails.application.routes.draw do
  mount ActionCable.server => '/cable'
end
person Prime    schedule 28.10.2020