2012-08-01 123 views
7

我想了解更多關於websocket及其內部實現。但仍然不能理解一些事情。我試着用Google進行深入的解釋,但其中大多數只是給出了高層次的概述。以下是我的疑惑Websocket連接設置

根據我讀,web套接字服務器(C#/ C++實現)的默認端口80。雖然我們可以使用任何端口中,優選的,我們使用端口80,因爲我們贏了沒有任何防火牆問題。如果是這樣,我們應該如何在同一個端口(80)上運行Web服務器和Web套接字服務器?

2.讓我們假設web套接字服務器在端口81上運行Web服務器,並在端口上運行80

  1. 因此,當瀏覽器發出的初始握手的HTTP請求(升級:的WebSocket) ,這個請求發送到81端口。對嗎?如果是這樣,這個請求(見下文)與HTTP協議沒有任何關係。但我們仍然使用HTTP協議標頭。爲什麼?

     GET /mychat HTTP/1.1 
         Host: server.example.com 
         Upgrade: websocket 
         Connection: Upgrade 
         Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== 
         Sec-WebSocket-Protocol: chat 
         Sec-WebSocket-Version: 13 
         Origin: http://example.com 
    
  2. 爲什麼力,他們使用目前大多數瀏覽器發出直接的TCP /與給定的端口IP連接實現了相同的WebSocket的接口,無需任何HTTP的東西?

3.是否有任何數據包的大小限制或數據/緩衝器限制發送數據/從客戶端/服務器接收到?如果是這種情況,我們是否需要構建數據並自行處理?

4. websocket服務器是否總是需要單獨的服務/進程?將來,Web服務器(IIS,apache)將包括對在其進程空間內託管Web套接字服務器的支持嗎?

+0

真的很好的問題! – GameScripting 2012-08-01 17:48:54

+1

我記得在某個地方看到下一版本的Windows Server將支持IIS下的網絡套接字。由於http.sys的實現,Windows 2008無法支持WebSockets。如果我找到參考,我會放在回答 – JoshBerke 2012-08-01 17:50:51

回答

3
  1. 通過使用HTTP兼容的握手,你可以一個WebSocket的處理程序集成到您的網絡服務器或只是有網絡服務器提出了WebSocket連接到專用的WebSocket服務器。

  2. WebSocket握手使用HTTP兼容握手來允許在同一端口上輕鬆處理兩個協議,並且它允許現有的防火牆配置更容易地支持WebSocket流量。此外,在HTTP請求的上下文中很好理解防止跨端腳本攻擊,所以WebSocket利用了這些知識。即使在建立連接之後,WebSocket也不是原始套接字連接的。這是一個基於消息的協議,因此需要組幀。另外,從客戶端(瀏覽器)發送到服務器時,爲了減輕對代理/緩存/中介行爲不當的理論漏洞的擔憂,框架被屏蔽。

  3. 協議本身的消息大小沒有限制。一條消息可以分成多個幀。幀大小有一個協議限制,但是它是2^64字節。根據客戶端/服務器的實現,實際的幀大小限制將會更小。如果您想要發送多兆字節的單條消息,則可以考慮將應用程序更改爲使用較小的消息來最大化跨瀏覽器和跨服務器支持。

  4. WebSocket處理可以明確地集成到Web服務器中,這是工作組設想的一種場景。例如,考慮pywebsocket,它可以在Apache中獨立運行或作爲mod_python模塊運行。又如,ASP.NET 4.5 and IIS 8 will have built-in support for WebSockets

+0

我想,轉發WebSocket連接的網絡服務器尚不實用。 – SysAdmin 2012-08-02 08:45:31

+0

@SysAdmin你的意思是你不實際嗎?很多人都成功地做到了這一點。快速搜索給了我這些:http://serverfault.com/questions/290121/configuring-apache2-to-proxy-websocket,http://stackoverflow.com/questions/2419346/can-nginx-be-used-as -a-reverse-proxy-for-a-backend-websocket-server,http://www.letseehere.com/reverse-proxy-web-sockets – kanaka 2012-08-02 15:13:50