2

WebSockets を使用して他のマシンと通信する Rails アプリケーションを作成しています (このプロセスにはブラウザーとクライアント側のロジックはありません)。私はチャンネルを持っています:

class MachinesChannel < ApplicationCable::Channel
  def subscribed
    ...
  end

  def unsubscribed
    ...
  end

  def handle_messages
    ...
  end
end

私が知っているデータを受け取る唯一の方法は、JavaScript クライアントです。

ActionCable.createConsumer('/cable').subscriptions.create 'MachinesChannel',
  received: (message) ->
    @perform('handle_messages')

メソッドを介して JS からサーバー側のメソッドを呼び出すことができます@perform()

JS 部分を省略して、受信データを何らかの方法で直接処理する方法はありますMachinesChannelか?

理想的な状況は、メソッドに引数をhandle_messages受け入れさせ、このメソッドを受信データに対して呼び出すことです。data

4

2 に答える 2

2

ActionCableソースコードを調べた後、次の解決策を得ました。MachinesChannel呼び出されるメソッドを作成するだけですhandle_messages(data)。次に、Websocket に接続するクライアントで、次の形式でメッセージを送信する必要があります (例: ruby​​)。

id = { channel: 'MachinesChannel' }
ws = WebSocket::Client::Simple.connect(url)
ws.send(JSON.generate(command: 'message', identifier: JSON.generate(id), data: JSON.generate(action: 'handle_messages', foo: 'bar', biz: 'baz')))

actionで呼び出されるメソッドの名前である必要がありますMachinesChannel。残りの Key-Value は任意です。ActionCableこれは、チャネルで受信できる日付です。

最近、gem action_cable_clientがリリースされました。これは、この種の使用法にぴったりだと思われます。使ったことがないので、実際の使い方はわかりません。

于 2016-04-12T08:28:24.390 に答える