TCPSocket соединение сбрасывается одноранговым
require 'socket'
socket = TCPSocket.open('stream-api.betfair.com', '443')
while line = socket.gets
puts line.chop
end
socket.close
Я должен получить что-то вроде {"op":"connection","connectionId":"002-230915140112-174"}
но я получаю Connection reset by peer
который
означает, что удаленный конец отправил бы пакет сброса (RST), чтобы разорвать соединение без упорядоченного отключения (закрытия). В этом случае вы знаете, что это был пэр (клиент).
Betfair включил пример nodejs, а также примеры csharp/java
Буду признателен за любую оказанную помощь. Спасибо!
1 ответ
Прежде всего, вы должны заменить строку '443' на целое число:
TCPSocket.open('stream-api.betfair.com', 443)
В любом случае, похоже, что это связано с обсуждением SSL: следующий пост Stackru дает краткое представление о том, что будет работать: Как установить TCP/IP-соединение с поддержкой SSL в Ruby. Используя этот метод, я работаю.
require 'socket'
require 'openssl'
host = 'stream-api.betfair.com'
port = 443
socket = TCPSocket.open(host,port)
ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.ssl_version = :SSLv23
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect
while line = ssl_socket.gets
p line
end
ssl_socket.close
Результат:
"{\"op\":\"connection\",\"connectionId\":\"001-151118094105-259478\"}\r\n"
Работа с защищенным соединением SSL/TLS иногда довольно многословна с Ruby. В приведенном вами примере в NodeJS подсказка - это первая строка:
var tls = require('tls');