简体   繁体   中英

Ruby server side Websocket client

Lately i have been experimenting with ruby and websockets. So i created a new Rails 5 project with ActionCable, all seems to work fine with it.

But also i created a ruby plain script with the Faye's ruby websocket client . Unlike most tutorials on internet i want to try a server side (as a client) script, not a frontend JS script inside an HTML file.

So i tried the basic usage of it and i successfully make the handshake to perform correctly but i can't continue testing because i cant figure where to subscribe after connected to a desired channel exposed in the Rails server.

Here is my ruby script code:

require 'faye/websocket'
require 'eventmachine'

EM.run {
  ws = Faye::WebSocket::Client.new('ws://localhost:3001/cable',nil,{
    headers: {'Origin' => 'ws://localhost:3001/cable'}
  })

  ws.on :open do |event|
    p [:open]
    ws.send({data: 'hello'})
  end

  ws.on :message do |event|
    p [:message, event.data]
  end

  ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end

  ws.on :error do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end

  ws.send({data: 'yoyoyooy'}) # This gets sent to nowhere..
  # I was hoping into subscribing a channel and callbacks for that channel, something like:
  # ws.subscribe('my-channel',receive_message_callback,error_callback)
}

On the actioncable side my connection class does trigger the connect method, but i am still unsure how to interact with a channel. Like subscribing from the client so i can start sending and receiving messages.

By reading the readme of websocket action cable client gem i realized that any websocket would do the job, i just needed to send the proper payload in the send method according to what ActionCable needs. In this case:

ws.send {"command":"subscribe","identifier":"{\"channel\":\"#{channel}\",\"some_id\":\"1\"}"}.to_json

Off-topic: I couldn't find this in the rails overview page I just needed to search over the ActionCable Protocol

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM