ruby - 对等方重置 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 示例
任何帮助深表感谢。谢谢!
解决方案
首先,您应该将字符串 '443' 替换为整数:
TCPSocket.open('stream-api.betfair.com', 443)
无论如何,它似乎与 SSL 协商有关:下面的 Stackoverflow 帖子快速了解了什么会起作用:如何在 Ruby 中建立启用 SSL 的 TCP/IP 连接。使用这种方法,我工作。
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"
使用 Ruby 处理受 SSL/TLS 保护的连接有时非常冗长。在您给出的示例中,在 NodeJS 中,提示是第一行:
var tls = require('tls');
推荐阅读
- python - CPython 中从 C 代码调用 Python 函数的机制是什么?
- python - 无法让python exe运行
- python - 如何将 PyTorch 张量转换为 Numpy ndarray
- node.js - Express - 嵌套目录中每个模板文件的路由和渲染引擎
- spring-integration - SimpleMessageListenerContainer - AMQP 接收消息上的 ClassNotFoundException 警告
- reactjs - 我可以在科尔多瓦应用程序中使用苹果支付按钮吗?
- node.js - UnhandledPromiseRejectionWarning:TypeError:无法读取 null 的属性“_id”
- node.js - Ionic Client 网络套接字断开连接
- node.js - 为什么 linting 因“Unexpected token ”而失败。在“import.meta.url”上?
- python - 如何迭代到函数中最右边的叶子