2016-05-23 12 views
2

私は、WebsocketのエミッタまたはサーバとしてAction Cable(Rails 5の機能)に精通しています。しかし、私はウェブソケット(例えば、 'socket.provider.com?token = 12345')を介してデータを送信するAPIを消費することになっています。Rails 5 app(Action Cable)Socket.ioサーバーとクライアントとして

私はsocket.io-client-simple(https://github.com/shokai/ruby-socket.io-client-simple)を使用して単純なRubyファイルでいくつかのテストを行いましたが、うまくいきましたが、これはデプロイされたRailsアプリケーションでどのように動作するかわかりません。私は、APIプロバイダが発行するイベントを常にリスンする別のプロセスが必要であると推測しています。誰かが似たようなことをやったのですか私は展開のためにHerokuを使用するつもりです。

注:ウェブサポートを受け取ってから私のRailsアプリケーション(つまりJavascript Socket.IOライブラリ)にポストするクライアント側のアプローチを使用すると、オプションを受け取ることができないイベントからリアルタイムで到来し、少なくとも1つのクライアントの接続性に依存しない。

「イベントのリスナー」として機能するようにアクションケーブルを自動的に設定する方法があるかどうかは疑問です。これまでの話題は何も読んでいないが、その方向性に関する提案を見たい。

更新:

require 'rubygems' 
require 'socket.io-client-simple' 

socket = SocketIO::Client::Simple.connect 'https://api.provider.com', token: '12345' 

socket.on :connect do 
    puts "connect!!!" 
end 

socket.on :disconnect do 
    puts "disconnected!!" 
end 

socket.on :providerevent do |data| 
    puts data 
end 

socket.on :error do |err| 
    p err 
end 

puts "please input and press Enter key" 
loop do 
    sleep 100 
end 

答えて

3

ActionCableは、「自分自身で外部サイトのイベントに耳を傾け、そうあなたすることはできません。ここで私は、プロバイダのWebSocketをAPIに接続するために、これまで使用しているRubyのコードがありますsocket.ioとActionCableを組み合わせなければなりません。イベントが発生したチャンネルを更新するために

ActionCable.server.broadcast "channel_name", param1: your_param1, param2: your_param2

ActionCableは次のようにチャンネルに更新を送信することができます。チャンネルのcoffeescriptファイルの処理は、 receivedです。何かを行う必要があります。 私が理解から、あなたがイベントをリスニングすることでしょうコントローラでこのような何かを探している:

def listen 
    socket.on :connect do 
    # persist your data 
    # example: @post = Post.create(...) 
    ActionCable.server.broadcast "channel_name", post_title: @post.title 
    end 
end 

とあなたのchannel_name.coffee中:この設定で

received: (data) -> 
    console.log(data["post_title"]) 
    # do something 

、あなたはapiからイベントを受信し、それをあなたのチャンネルにブロードキャストします。このページは、あなたのソケットがイベントを受け取るたびに更新されるチャンネルの設定です。

まず、DDHのチュートリアルに従ってください。次に、私の解決策を理解しやすくなります(これは実装がかなり簡単です)。

+0

こんにちはグラハム、リンクありがとう。私はプロダクションでActionCableを使う方法を知っています。私の質問は、Railsアプリケーションから外部プロバイダ**からソケットイベント**を積極的にリッスンする方法でした。これは、自分のアプリケーションが自分のアプリケーションから生成されたイベントを生成するだけでなく、外部APIによって生成されたイベントも受け取ることを意味します。 –

+0

外部のAPIがリクエスト/イベントをアプリケーションのエンドポイントに送信していますか? –

+0

いいえ、私は彼らのエンドポイントに接続することによってそれらを聞く必要があります(例えば、socket.provider.com?token = 12345にSocket.IO経由で接続するなど)。これは私の質問で述べたように、私が書いたテスト用のRubyプログラムで動作しますが、私が望むのは、アクティブなバックグラウンドプロセスを常にこのプロバイダのWebsocket APIに接続する方法を知ることです。 –

関連する問題