2015-05-22 22 views
0

使用Ruby TCPSocket我可以做這樣的事情:紅寶石:建立特定URI路徑上的客戶端連接使用Ruby的TCPSocket

@socket = TCPSocket.new "174.129.224.73", 80 

相當於測試回波的WebSocket ws://echo.websocket.org

但是如果我需要建立與插座連接基於

domain:10440/api/websockets 

如何使用TCPSocket做到這一點?

+2

TCPSocket和Websocket是不同的東西,有點類似的行爲,相似的名稱和不同的用法。 WebSockets實際上是一個HTTP(S)連接內部的一個連接,它本身就是一個TCP連接。 –

+0

@SteffenUllrich這解釋了很多。我在套接字上建立了TCP連接,然後將websocket請求發送到特定路徑,並且現在可以工作 –

回答

1

爲了把更多的上下文斯特芬·烏爾裏希的回答是:

這不可能的方式來完成你想象的(或要求),它被完成。

你問的是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>"