2016-08-25 6 views
2

私は、Railsアプリケーションと従来のhtmlページの間にActionCableを使ってWebSocketを作成しようとしています。リモートからのActionCableの使用

jsスクリプトで「Subscribe」を使用することができます。speakコマンドを試してみると、エラーが表示されます。 。

私のコード:(https://gist.github.com/fclement21/ebd3be213f1fa5746321bd75284601b0

JS

var ws = new WebSocket("ws://localhost:3000/cable"); 
    var id = { channel: 'StreamChannel'}; 
    var sub_cmd = { 
    command: 'subscribe', 
    identifier: JSON.stringify(id) 
    } 

    ws.onclose = function() { // thing to do on close 
    }; 
    ws.onerror = function() { // thing to do on error 
    }; 
    ws.onmessage = function(e) { // thing to do on message 
    data = JSON.parse(e.data); 
    console.log(data); 
    if(data.message.status == "200"){ 
     var id_test = { channel: 'StreamChannel', content: "Hi everyone !"}; 
     var stream_id = { 
     command: 'speak', 
     identifier: JSON.stringify(id_test) 
     } 
     ws.send(JSON.stringify(stream_id)); 
    } 
    }; 
    ws.onopen = function(e) { 
    ws.send(JSON.stringify(sub_cmd)); 
    }; 

マイStream_channel.rb

class StreamChannel < ApplicationCable::Channel 
    def subscribed 
    stream_from "stream_test" 
    ActionCable.server.broadcast "stream_test", message: "You are now connected !", status: 200 
    end 
    def speak 
    ActionCable.server.broadcast "stream_test", message: "Your message has been sended", status: 200 
    end 
end 
+0

あなたはこれを解明しましたか? – andrewoodleyjr

答えて

2

私はREADME on this GitHub repoのおかげでそれを把握することができました。 ActionCableは実際に物事を送るために "メッセージ"コマンドを使用するようです。追加する重要なことは、提供されたJSONにも「アクション」属性が必要なことです。投稿されたコードを例として使用してください:

if(data.message.status == "200"){ 
    var id_test = { channel: 'StreamChannel' }; 
    var stream_id = { 
    command: 'message', 
    identifier: JSON.stringify(id_test), 
    data: JSON.stringify({action: "speak", content: "Hi everyone !"}) 
    } 
    ws.send(JSON.stringify(stream_id)); 
} 
関連する問題