Action Cable (Rails 5) Получение данных с фондовой биржи

Я надеюсь передать данные, которые я получаю с фондовой биржи (через веб-узел), и передать эти данные клиенту. Я считаю, что экшн-кабель - лучший подход, но пока безуспешен.

«DataProvider» построил SDK на Ruby для создания соединения между моим сервером и сервером биржи. Мне удалось успешно подключиться, но я не видел потока данных.

Какие-либо предложения?

Канал:

class StockPriceChannel < ApplicationCable::Channel
  def subscribed
    stream_from "portfolio_#{params[:portfolio_id]}"

  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
    EventMachine.stop()
  end

  def receive(data)
    tickers = data["message"]

    tickers = tickers.split(",")

    puts tickers


    options = {
       username: ENV["DataProvider_USERNAME"],
       password: ENV["DataProvider_PASSWORD"],
      channels: tickers
     }

    EventMachine.run do

     client = DataProvider::Realtime::Client.new(options)
      client.on_quote do |quote|
        StockPriceChannel.server.broadcast_to("portfolio_#
 {params[:portfolio_id]}",quote)
      end
      client.connect()

      EventMachine.add_timer(1) do
        puts "joining tickers"
        client.join(tickers)
      end

  #     EventMachine.add_timer(10) do
  #       client.disconnect()
  #       EventMachine.stop()
  #     end

    end
  end
end

ReactJS (в componentDidMount ())

App.portfolioChannel = App.cable.subscriptions.create(
  {
    channel:"StockPriceChannel",
    portfolio_id:this.props.match.params.port_id
  },
  {
    connected: () => console.log("StockPriceChannel connected"),
    disconnected: () => console.log("StockPriceChannel disconnected"),
    received: data => {
      debugger;
      console.log(data)
    }
  }
)
App.portfolioChannel.send({
  message:"AAPL,MSFT"
})

person Jared Shulman    schedule 29.08.2017    source источник


Ответы (1)


Что ж ... Надеюсь, это (по крайней мере) кому-нибудь поможет.

Я понял, что моя проблема была

StockPriceChannel.server.broadcast_to("portfolio_#
    {params[:portfolio_id]}",quote)

должно быть

ActionCable.server.broadcast_to("portfolio_#
    {params[:portfolio_id]}",quote)
person Jared Shulman    schedule 29.08.2017