Ruby:使用 ruby TCPSocket 在特定 URI 路径上建立客户端连接
Ruby: Establish client connection on particular URI path with ruby TCPSocket
使用 Ruby TCPSocket 我可以做这样的事情:
@socket = TCPSocket.new "174.129.224.73", 80
对应test echo websocket ws://echo.websocket.org
但是如果我需要与基于
的套接字建立连接怎么办?
domain:10440/api/websockets
如何使用 TCPSocket 执行此操作?
为 Steffen Ullrich 的回答提供更多背景信息:
这无法按照您想象(或要求)的方式完成。
您询问的 URL 部分 (/the/path
) - 称为 URI,“Unique R esource Identifier" - 特定于 HTTP,不适用于所有 TCP/IP 连接。
根据 HTTP 协议(使用任何 HTTP 方法,例如 HEAD、GET、POST 等),通常在建立 TCP 连接后请求 URI。
Websocket 协议使用一个名为 "UPGRADE" 的 HTTP 方法,它要求服务器从 HTTP 协议切换到 Websocket 协议。
在此升级请求期间,请求的资源是使用它的 URI 请求的。在 ws://echo.websocket.org
,资源位于根目录 - /
,但它可以在任何地方并识别不同的 websockets,例如使用 /echo
用于 echo 和 /chat
用于不同的 web -app 应用程序。
您可以自己看到以下行未连接到 websocket 回显服务器:
@socket = TCPSocket.new "174.129.224.73", 80
@socket
已连接到HTTP服务器,尚未建立websocket连接。
看看你得到什么回应:
require 'socket'
@socket = TCPSocket.new "174.129.224.73", 80
@socket << "GET / HTTP/1.0\r\n\r\n"
@socket.read 1024
@socket.close
如您所见,您收到了一个 HTTP 响应。
# @socket.read(1024) # => should return "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\nContent-Length: 61\r\n\r\n<html><head></head><body><h1>404 Not Found</h1></body></html>"
使用 Ruby TCPSocket 我可以做这样的事情:
@socket = TCPSocket.new "174.129.224.73", 80
对应test echo websocket ws://echo.websocket.org
但是如果我需要与基于
的套接字建立连接怎么办?domain:10440/api/websockets
如何使用 TCPSocket 执行此操作?
为 Steffen Ullrich 的回答提供更多背景信息:
这无法按照您想象(或要求)的方式完成。
您询问的 URL 部分 (/the/path
) - 称为 URI,“Unique R esource Identifier" - 特定于 HTTP,不适用于所有 TCP/IP 连接。
根据 HTTP 协议(使用任何 HTTP 方法,例如 HEAD、GET、POST 等),通常在建立 TCP 连接后请求 URI。
Websocket 协议使用一个名为 "UPGRADE" 的 HTTP 方法,它要求服务器从 HTTP 协议切换到 Websocket 协议。
在此升级请求期间,请求的资源是使用它的 URI 请求的。在 ws://echo.websocket.org
,资源位于根目录 - /
,但它可以在任何地方并识别不同的 websockets,例如使用 /echo
用于 echo 和 /chat
用于不同的 web -app 应用程序。
您可以自己看到以下行未连接到 websocket 回显服务器: @socket = TCPSocket.new "174.129.224.73", 80
@socket
已连接到HTTP服务器,尚未建立websocket连接。
看看你得到什么回应:
require 'socket'
@socket = TCPSocket.new "174.129.224.73", 80
@socket << "GET / HTTP/1.0\r\n\r\n"
@socket.read 1024
@socket.close
如您所见,您收到了一个 HTTP 响应。
# @socket.read(1024) # => should return "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\nContent-Length: 61\r\n\r\n<html><head></head><body><h1>404 Not Found</h1></body></html>"