Ruby клиент Websocket на стороне сервера - PullRequest
0 голосов
/ 07 февраля 2020

В последнее время я экспериментировал с ruby и паутиной. Поэтому я создал новый проект Rails 5 с ActionCable, с ним все вроде бы нормально работает.

Но также я создал ruby обычный скрипт с клиентом Faye ruby websocket . В отличие от большинства учебных пособий по inte rnet, я хочу попробовать скрипт на стороне сервера (в качестве клиента), а не скрипт внешнего интерфейса JS внутри файла HTML.

Итак, я попробовал основы c использовать его, и я успешно заставляю рукопожатие работать правильно, но я не могу продолжить тестирование, потому что я не могу понять, где подписаться после подключения к желаемому каналу, выставленному на сервере Rails.

Вот мой ruby код сценария:

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)
}

На стороне actioncable мой класс подключений вызывает метод connect, но я все еще не уверен, как взаимодействовать с каналом. Как подписка от клиента, чтобы я мог начать отправлять и получать сообщения.

1 Ответ

0 голосов
/ 08 февраля 2020

Прочитав файл readme из gem клиента кабеля действия веб-сокета, я понял, что любой веб-сокет будет работать, мне просто нужно было отправить правильную полезную нагрузку в методе send в соответствии с потребностями ActionCable. В этом случае:

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

Off-topi c: я не смог найти это на странице обзора rails Мне просто нужно было выполнить поиск по протоколу ActionCable

...