2016-04-06 15 views
1

WebSocketを使って他のマシンと通信するRailsアプリケーションを作成しています(このプロセスではブラウザとクライアントサイドのロジックはありません)。私は@perform()メソッドを介してJSからサーバ側のメソッドを呼び出すことができますJSなしのActionCable Channelでデータを受け取る方法は?

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

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

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

    def unsubscribed 
    ... 
    end 

    def handle_messages 
    ... 
    end 
end 

:私はチャンネルを持っています。

JS部分を省略する方法はありますか、どういうわけか入力データを直接処理する方法はありますかMachinesChannel

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

答えて

1

ActionCableソースコードを調べたところ、次の解決策が見つかりました。 MachinesChannelに、呼び出すメソッドを作成するだけです。 handle_messages(data)。次に、あなたのWebSocketに接続するクライアントには、次の形式(ルビーの例)でメッセージを送信する必要があります。

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で呼ばれるようにしたいメソッドの名前である必要があります。残りのキー値はあなたが望むものです。これはActionCableチャンネルで受信できる日付です。

最近、宝石action_cable_clientがリリースされました。この宝石は、この種の用途には完全に適しています。私はそれを使用していないので、私はそれが本当にどのように動作するのか分かりません。

+0

ちょっと! action_cable_clientは私の宝石です。誰かが使用に関するご質問があれば、お手伝いします。 :-) – NullVoxPopuli

関連する問題