Ruby:使用ruby TCPSocket在特定的URI路径上建立客户端连接

时间:2015-05-22 20:18:18

标签: ruby sockets websocket tcpserver tcpsocket

使用Ruby TCPSocket我可以这样做:

@socket = TCPSocket.new "174.129.224.73", 80

对应于test echo websocket ws://echo.websocket.org

但是如果我需要基于

建立与套接字的连接怎么办?
domain:10440/api/websockets

如何使用TCPSocket执行此操作?

1 个答案:

答案 0 :(得分:1)

为Steffen Ullrich的答案提供更多背景信息:

这不能以你想象(或要求)完成的方式完成。

您要询问的网址部分(/the/path) - 称为URI,“ U nique R 资源 dentifier“ - 特定于HTTP,不适用于所有TCP / IP连接。

根据HTTP协议(使用任何HTTP方法,如HEAD,GET,POST等),通常在建立TCP连接后请求URI。

Websocket协议使用名为“UPGRADE”的HTTP方法,要求服务器从HTTP协议切换到Websocket协议。

在此UPGRADE请求期间,使用它的URI请求所请求的资源。在ws://echo.websocket.org,资源位于根目录 - /,但它可以位于任意位置并识别不同的网址,例如使用/echo表示echo,/chat表示不同的网页-app application。

您可以自己看到以下行未连接到websocket echo服务器:     @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>"