天天看點

Windows Azure 網站上的 WebSocket 簡介

編輯人員注釋:本文章由 Windows Azure 網站團隊的首席項目經理 Stefan Schackow 撰寫。

Windows Azure 網站最近新增了對 WebSocket 協定的支援。.NET 開發人員和 node.js 開發人員現在可在其應用程式中啟用 WebSocket 并加以利用。

網站的 Configuration 頁籤上有一個新的選項,用于為應用程式提供 WebSocket 支援。

Windows Azure 網站上的 WebSocket 簡介

為網站啟用 WebSocket 後,ASP.NET(v4.5 及更高版本)和 node.js 開發人員便可将各自架構的庫和 API 與 WebSocket 配合使用。

ASP.NET SignalR聊天示例

SignalR 是一個用于建構實時 Web 應用程式的開源 .NET 庫,這些 Web 應用程式需要實時 HTTP 連接配接才能傳輸資料。我們提供了一個很棒的站點,其中包含有關 SignalR 庫的介紹性文章和詳細資訊。

由于 SignalR 本身支援将 WebSocket 作為協定,是以 SignalR 是在 Windows Azure 網站上運作連網 Web 應用程式的絕佳選擇。例如,您可以在 Windows Azure 網站上運作此示例聊天應用程式。

以下快照顯示了 SignalR 聊天示例的結構:

Windows Azure 網站上的 WebSocket 簡介

在 Windows Azure 網站中建立 Web 應用程式、為應用程式啟用 WebSocket 并上傳 SignalR 聊天示例之後,即可在 Windows Azure 網站上運作自己專屬的迷你聊天室!

Windows Azure 網站上的 WebSocket 簡介

Fiddler 的原始 HTTP 跟蹤(如下所示)顯示了 SignalR 用戶端發送的 WebSocket 協定更新請求如何與 Web 伺服器協商 WebSocket 連接配接:

Request snippet:

GET 

https://sigr-chat-on-waws.xxxx.net/signalr/connect?transport=webSocketssnip HTTP/1.1

Origin:https://sigr-chat-on-waws.xxxx.net

Sec-WebSocket-Key:hv2icF/iR1gvF3h+WKBZIw==

Connection:Upgrade

Upgrade:Websocket

Sec-WebSocket-Version:13

Response snippet:

HTTP/1.1 101 Switching Protocols

Upgrade:Websocket

Server:Microsoft-IIS/8.0

X-Content-Type-Options:nosniff

X-Powered-By:ASP.NET

Sec-WebSocket-Accept:Zb4I6w0esmTDHM2nSpndA+noIvc=

Connection:Upgrade

要了解有關利用 SignalR 建構實時 Web 應用程式的更多資訊,請參閱 SignalR 概述網站上的擴充教程。

ASP.NET Echo 示例

ASP.NET 自 .NET Framework v4.5 起即為 WebSocket 提供支援。開發人員通常希望使用更進階别的庫(如 SignalR),以封裝管理 WebSocket 連接配接的低級别詳細資訊。但是,對于勇于探索的開發人員,本節顯示了一個在 ASP.NET 中使用低級别 WebSocket 支援的簡短示例。

ASP.NET Echo 示例項目包含一個可偵聽并響應 WebSocket 的伺服器端 .ashx 處理程式和一個可建立 WebSocket 連接配接并将文本發送到伺服器的簡單 HTML 頁面。

.ashx 處理程式可偵聽 WebSocket 連接配接請求:

Windows Azure 網站上的 WebSocket 簡介

.ashx 處理程式可偵聽 WebSocket 連接配接請求:

Windows Azure 網站上的 WebSocket 簡介

建立 WebSocket 連接配接後,處理程式會将文本傳回到浏覽器:

Windows Azure 網站上的 WebSocket 簡介

對應的 HTML 頁面将在加載頁面時建立 WebSocket 連接配接。當浏覽器使用者通過 WebSocket 連接配接發送文本時,ASP.NET 會傳回輸入的文本。

Windows Azure 網站上的 WebSocket 簡介

以下快照顯示了一個浏覽器會話,傳回了輸入的文本然後關閉WebSocket 連接配接。

Windows Azure 網站上的 WebSocket 簡介

Node.js 基本聊天示例

Node.js 開發人員對于使用 socket.io 庫編寫需要長時間運作的 HTTP 連接配接的網頁非常熟悉。socket.io 支援将 WebSocket(及其他選項)作為網絡協定,并且可将其配置為使用 WebSocket 進行傳輸(如果可用)。

Node.js 應用程式應該包括 socket.io 子產品,然後在代碼中配置socket:

Windows Azure 網站上的 WebSocket 簡介

如下所示的示例代碼可偵聽要使用昵稱(例如聊天處理)連接配接的用戶端,并将聊天消息廣播到目前連接配接的所有用戶端。

Windows Azure 網站上的 WebSocket 簡介

在 web.config 中,使用 WebSocket 的 node.js 應用程式需要進行以下小調整:

Windows Azure 網站上的 WebSocket 簡介

該web.config 條目将關閉 IIS WebSocket 支援子產品 (iiswsock.dll),因為 node.js 不需要此子產品。IIS 上的 nodej.js 包括自己的低級别 WebSocket 實作,這正是需要關閉 IIS 支援子產品的原因所在。

但請記住,仍需使用本文先前所示的 UI 中的 Configuration 門戶頁籤為您的網站啟用 WebSocket 功能。

如果兩個用戶端均已連接配接并且已使用示例 node.js 應用程式交換消息,HTML 輸出将如下所示:

Windows Azure 網站上的 WebSocket 簡介

Fiddler 的原始 HTTP 跟蹤(如下所示)顯示了 socket.io 用戶端發送的 WebSocket 協定更新請求如何與 Web 伺服器協商 WebSocket 連接配接:

Request snippet:

GET

https://abc123.azurewebsites.net/socket.io/1/websocket/11757107011524818642HTTP/1.1

Origin:https://abc123.azurewebsites.net

Sec-WebSocket-Key:rncnx5pFjLGDxytcDkRgZg==

Connection:Upgrade

Upgrade:Websocket

Sec-WebSocket-Version:13

Response snippet:

HTTP/1.1 101 Switching Protocols

Upgrade:Websocket

Server:Microsoft-IIS/8.0

X-Powered-By:ASP.NET

Sec-WebSocket-Accept:jIxAr5XJsk8rxjUZkadPWL9ztWE=

Connection:Upgrade

WebSocket 連接配接限制

目前,Azure 網站已對每個運作的網站執行個體支援的并發 WebSocket 連接配接數實施限制。每種伸縮模式下每個網站執行個體支援的 WebSocket 連接配接數如下所示:

·   免費:每個網站執行個體支援 (5) 個并發連接配接

·   共享:每個網站執行個體支援 (35) 個并發連接配接

·   标準:每個網站執行個體支援 (350) 個并發連接配接

如果您的應用程式試圖打開超過允許限制的 WebSocket 連接配接,Windows Azure 網站将傳回 503 HTTP 錯誤狀态代碼。

注意:術語“網站執行個體”指的是,如果您的網站調整為在 (2) 個執行個體上運作,則計為 (2) 個運作的網站執行個體。

您可能需要對 WebSocket 使用 SSL!

當使用 WebSocket 時,開發人員需要牢記一點。WebSocket 協定依賴于某些不常用的 HTTP 頭,尤其是Upgrade頭,是以中間網絡裝置(如 Web 代理)将這些頭剔除并不足為奇。最終的結果通常讓開發人員灰心喪氣且滿腹疑問:WebSocket 應用程式為何不運作,或不選擇 WebSocket,卻反而選擇了效率更低的替代解決方案。

解決此問題的竅門是通過 SSL 建立 WebSocket 連接配接。要完成此操作,請執行以下兩個步驟:

·   針對 WebSocket 端點使用 wss:// 協定辨別符。例如,不要連接配接到 ws://mytestapp.azurewebsites.net(通過 HTTP 的 WebSocket),而要連接配接到 wss://mytestapp.azurewebsites.net(通過 HTTPS 的 WebSocket)。

·   (可選)同時通過 SSL 運作使用WebSocket的頁面。有時不需要執行此操作,但根據您使用的用戶端架構,對包含 HTML 頁面的 SSL 設定可能會使 WebSocket 連接配接具備 SSL 功能。

Windows Azure 網站通過使用 *.azurewebsites.net 的預設 SSL 證書為 SSL 提供支援,甚至包括在免費站點上。是以,您無需配置自己的 SSL 證書來解決此問題。對于 azurewebsites.net 下的 WebSocket 端點,您隻需要切換為使用 SSL,此時将自動使用 *.azurewebsites.net 通配符 SSL 證書。

您還可以為網站注冊自定義域,然後配置站點的 SNI 證書或基于 IP 的 SSL 證書。有關配置自定義域以及 Windows Azure 網站的 SSL 證書的詳細資訊,請參考 Windows Azure 文檔網站。

本文翻譯自:

http://blogs.msdn.com/b/windowsazure/archive/2013/11/14/introduction-to-websockets-on-windows-azure-web-sites.aspx

轉載于:https://www.cnblogs.com/sesexxoo/p/6191091.html

繼續閱讀