.NET 4.5 WebSockets 與 SignalR
我已經看到了用於 asp.net MVC 聊天應用程序的 signalR 與 html5 websockets,但它並沒有 100% 回答我的問題,因為它基於 HTML5 WebSockets,Microsoft 可能在 .NET 4.5 中使用他們的 WebSocket 對像對其進行了擴展。
我想知道 WebSocket 功能是否確實與 SignalR 一樣,並且在 WebSocket 不可用時回退到長輪詢?微軟肯定會在他們的技術方法中實施與 SignalR 相同的技術嗎?
編輯:
對於其他對此感到疑惑的人,我發現此評論最有助於理解該場景以及我將使用 SignalR 的原因:
好吧,他們不是真的。到目前為止,IIS 和 ASP.NET 沒有內置任何支持 WebSockets 的東西,因此 SignalR 項目必須自己建構它。既然微軟正在提供管道 SignalR,可以很容易地切換到使用微軟的實現,無論是補充還是代替他們自己的實現。SignalR 是對實現細節的抽象,WebScockets 類是實現細節
- >
我想知道 WebSocket 功能是否確實與 SignalR 一樣,並且在 WebSocket 不可用時回退到長輪詢?
WebSockets 是一種獨立於其他通信技術的新協議。來自 RFC
該技術的目標是為基於瀏覽器的應用程序提供一種機制,這些應用程序需要與不依賴於打開多個 HTTP 連接的伺服器進行雙向通信(例如,使用 XMLHttpRequest 或 s 和長輪詢)。
- >
微軟肯定會在他們的技術方法中實施與 SignalR 相同的技術嗎?
如果他們想符合規範,他們就不會。當然,沒有什麼能阻止微軟開發類似於 SignalR 的更高級別的 API,它可以抽像出通信細節並提供優雅的回退。然而,這個假設的 API 可能會建構在WebSocket類之上,而不是替換它。
我認為 SignalR 是要走的路,並且無論如何都將成為 .NET 本身的一部分(並且可能擴展/合併/替換 web-sockets 支持)。它在受支持時使用 Web 套接字,而在不受支持時使用一致的客戶端輪詢黑客,因此,這是要走的路。
更新:
由於此答案仍在獲得支持,因此值得一提的是,SignalR 現在已正式成為 ASP.NET 的一部分。
檢查<http://asp.net/signalr>
更新:.NET 核心
正如@yazanpro 在評論中指出的那樣,SignalR 也被添加到 .NET Core。
它在 .NET Core 2.1 中可用,並且也有官方文件。