2013-01-08 146 views
-1

我寫了一個JavaScript的香草WebSocket客戶端,通過8080端口連接到本地主機,併發送'你好服務器'。爲什麼在使用WebSockets的時候得到HTTP請求?

我的服務器在Python中使用標準套接字包。當我將它連接使用WebSocket到,服務器接收到一個HTTP請求:

GET/HTTP/1.1 
Upgrade: websocket 
Connection: Upgrade 
Host: 127.0.0.1:8080 
Origin: http://127.0.0.1:3030 
Pragma: no-cache 
Cache-Control: no-cache 
Sec-WebSocket-Key: g3y2hDw5WpZYKUwIrsGYaw== 
Sec-WebSocket-Version: 13 
Sec-WebSocket-Extensions: x-webkit-deflate-frame 

...並沒有收到原「Hello服務器」本來應該由發送消息WebSocket連接。

我很困惑;是普通的套接字和WebSockets不是一回事嗎?爲什麼我會收到HTTP請求而不是原始郵件?

+0

我不在家,所以我不能確定,但​​afaik WebSockets的工作是由客戶端發送一個「升級」HTTP請求,服務器應該用HTTP 101交換協議來響應。然後他們繼續建立WebSockets連接。還有一個複雜的Sec-WebSocket-Key和-Acepts事情,最好的方法是使用專用的庫。 – TwiNight

+0

如果你想在Python中使用WebSocket,看看[Autobahn](https://github.com/tavendo/AutobahnPython) – sloth

回答

0

總之,沒有網絡套接字不只是插座。它們是TCP之上的一個新的類似於http的協議。有關詳細信息,請參閱http://en.wikipedia.org/wiki/WebSocket以獲取簡要概述或參閱RFC http://tools.ietf.org/html/rfc6455

+0

WebSockets不是「類似於http」的。它們具有HTTP兼容握手(因此它們可以與現有基礎架構和服務更好地共存),但在此之後,它們是雙向,全雙工,低延遲的傳輸,支持原始二進制數據,這完全不像HTTP 。 – kanaka

相關問題