首页 > 解决方案 > 通过 websocket 连接到 CoinEx 时如何修复 Errno::ENETUNREACH?

问题描述

我正在尝试使用 Ruby 2.6 通过 WebSocket 与 CoinEx(加密货币交换)API 进行通信。我有以下代码:

require 'faye/websocket'
require 'eventmachine'

url = 'wss://socket.coinex.com/'
# url = 'wss://stream.binance.com:9443/ws/ltcbtc@miniTicker'

EM.run do
  ws = Faye::WebSocket::Client.new(url)

  ws.on :open do |event|
    p [:open]
    ...
  end

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

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

当我运行这段代码时,我总是[:close, 1006, ""]立即看到,没有[:open]. 我深入研究了 gems(faye/websocket 和 eventmachine)并添加了一些调试输出以更好地了解正在发生的事情。现在我的回溯如下:

/home/chernish2/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/faye-websocket-0.10.9/lib/faye/websocket/client.rb:87:in `unbind'
/home/chernish2/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/eventmachine-1.2.7/lib/eventmachine.rb:1483:in `event_callback'
/home/chernish2/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/eventmachine-1.2.7/lib/eventmachine.rb:195:in `run_machine'
/home/chernish2/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/eventmachine-1.2.7/lib/eventmachine.rb:195:in `run'
/home/chernish2/soft/trader2/test/ws_test.rb:36:in `<main>'
emit_error(), message=Errno::ENETUNREACH
[:close, 1006, ""]

由于另一个网址,这对我来说真的没有任何意义

url = 'wss://stream.binance.com:9443/ws/ltcbtc@miniTicker'

工作得很好,当我使用https://github.com/altangent/ccxws库(nodejs)时,它使用与我的代码中完全相同的 URL 连接到 CoinEx,没有任何麻烦,这意味着我没有连接问题到 CoinEx WS 端点。那么我的代码有什么问题?先感谢您!

标签: rubywebsocketeventmachine

解决方案


哦,它现在正在工作,我这边没有任何变化。似乎服务器端出现了一些问题。


推荐阅读