ruby-on-rails - 如何在 ruby​​ on rails 中通过 websocket 发送一个 keep-alive 数据包

标签 ruby-on-rails ruby websocket bitcoin coinbase-api

我要发一个

"Keep alive from client"

每 30 秒为我的 websocket 连接发送一条消息。这是我的 websocket 初始化程序中的代码:

ws = WebSocket::Client::Simple.connect 'wss://bitcoin.toshi.io/'

ws.on :message do |msg|
  rawJson = msg.data
  message_response = JSON.parse(rawJson)
end

ws.on :open do
  ws.send "{\"subscribe\":\"blocks\"}"
end

ws.on :close do |e|
  puts "WEBSOCKET HAS CLOSED #{e}"
  exit 1
end

ws.on :error do |e|
  puts "WEBSOCKET ERROR #{e}"
end

如果没有任何类型的“保持事件状态”,连接将在大约 45 秒内关闭。我应该如何发送“心跳”数据包?看来连接被他们的服务器关闭了,而不是我的。

最佳答案

您可以使用 Websocket Eventmachine Client gem 发送心跳:

require 'websocket-eventmachine-client'

EM.run do
  ws = WebSocket::EventMachine::Client.connect(:uri => 'wss://bitcoin.toshi.io/')
  puts ws.comm_inactivity_timeout
  ws.onopen do
    puts "Connected"
  end

  ws.onmessage do |msg, type|
    puts "Received message: #{msg}"
  end

  ws.onclose do |code, reason|
    puts "Disconnected with status code: #{code}"
  end

  EventMachine.add_periodic_timer(15) do
    ws.send "{}"
  end
end

您可以使用 EM::add_periodic_timer(interval_in_seconds) 为 EventMachine 设置定时器,然后用它发送您的心跳。

关于ruby-on-rails - 如何在 ruby​​ on rails 中通过 websocket 发送一个 keep-alive 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31819558/

相关文章:

ruby-on-rails - 什么是 Rack 中间件?

ruby - 为什么我的 Ruby 脚本会随着时间的推移变慢?

ruby - 将 ruby​​ 和 ruby​​gems 移动到自定义路径中

java - Android - WebSocket - 从最近使用的应用程序中清除应用程序时,连接从服务中断开

ruby-on-rails - 带有选项的 link_to image_tag (rel, title)

ruby-on-rails - routes.rb - 不支持 Controller 名称

ruby-on-rails - 在rails 3中的多列上分组+总和

mysql - 如何转换此 group_by 语句,使其在 DB 而不是 Ruby 上工作?

html - 同一客户端上的多个 websocket 连接 - 服务器无法处理

javascript - 在 MQTT 客户端 "Uncaught ReferenceError: Messaging is not defined"