使用Ruby TCPSocket我可以做這樣的事情:紅寶石:建立特定URI路徑上的客戶端連接使用Ruby的TCPSocket
@socket = TCPSocket.new "174.129.224.73", 80
相當於測試回波的WebSocket ws://echo.websocket.org
但是如果我需要建立與插座連接基於
domain:10440/api/websockets
如何使用TCPSocket做到這一點?
使用Ruby TCPSocket我可以做這樣的事情:紅寶石:建立特定URI路徑上的客戶端連接使用Ruby的TCPSocket
@socket = TCPSocket.new "174.129.224.73", 80
相當於測試回波的WebSocket ws://echo.websocket.org
但是如果我需要建立與插座連接基於
domain:10440/api/websockets
如何使用TCPSocket做到這一點?
爲了把更多的上下文斯特芬·烏爾裏希的回答是:
這不可能的方式來完成你想象的(或要求),它被完成。
你問的是URL的一部分(/the/path
) - 被稱爲URI, 「ū NIQUE [R esource 我 dentifier」 - 是HTTP具體,並不適用於所有的TCP/IP連接。
根據HTTP協議(使用任何HTTP方法,如HEAD,GET,POST等),通常會在進行TCP連接之後請求URI。
Websocket協議使用名爲「UPGRADE」的HTTP方法,要求服務器從HTTP協議切換到Websocket協議。
在此UPGRADE請求期間,使用它的URI請求資源請求。在ws://echo.websocket.org
處,資源位於根 - /
,但它可能位於任何地方並可識別不同的Web插座,例如使用/echo
作爲回顯,/chat
用於其他Web應用程序應用程序。
你可以看到自己,下面的線沒有連接到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>"
TCPSocket和Websocket是不同的東西,有點類似的行爲,相似的名稱和不同的用法。 WebSockets實際上是一個HTTP(S)連接內部的一個連接,它本身就是一個TCP連接。 –
@SteffenUllrich這解釋了很多。我在套接字上建立了TCP連接,然後將websocket請求發送到特定路徑,並且現在可以工作 –