深入理解WebSocket协议及其在.NET中的应用

WebSocket协议由IETF标准化为RFC 6455,可以在Wikipedia和W3C上找到更多相关信息。WebSocket连接通过客户端服务器之间的HTTP握手建立,前缀为"ws://"或"wss://"。例如,客户端发送请求:

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

然后服务器发送响应以接受连接:

HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat

"Sec-WebSocket-Key"和"Sec-WebSocket-Accept"用于通过密钥验证算法确认客户端和服务器之间的连接。"Sec-WebSocket-Version"是客户端用来告诉服务器客户端支持的协议版本。标准中不需要向后兼容。如果客户端指定的版本不被服务器支持,服务器可以通过这个头部发送版本列表。"13"(1.3)是WebSocket的一个重要版本。"Sec-WebSocket-Protocol"用于确认连接的自定义子协议。这允许客户端选择子协议,并确保服务器同意提供该子协议。

有关协议的更多详细信息,请参考RFC 6455。

.NET中的WebSocket

Microsoft.NET4.5提供了多种使用WebSocket的方式。在服务器端,可以通过以下任何一种方式托管WebSocket服务器:

  • 使用HttpContext.AcceptWebSocketRequest
  • 创建一个带有CallbackContract和新的netHttpBinding的WCF服务
  • 使用Microsoft.WebSockets.dll中提供的WebSocketHandler或WebSocketHost

在客户端Web端,HTML 5提供了WebSocketAPI,jQuery封装了这些API以便于使用。如果想创建客户端应用程序,可以通过以下任何一种方式:

  • 使用ClientWebSocket类(System.Net.WebSockets)
  • 创建一个WCF客户端并引用支持WebSocket连接的WCF服务

注意:只能在Windows 8、Windows Server 2012及以上版本中使用.NETWebSocket,包括服务器端和客户端应用程序。而且Web服务器必须是IIS 8及以上版本。IIS 8 Express目前不支持WebSocket,这是Visual Studio 2012中包含的。希望微软将来能添加支持。

HTML 5 WebSocket API对操作系统平台没有限制。唯一的限制是浏览器版本。从IE 10开始,Internet Explorer开始支持HTML 5 WebSocket。

准备

要在服务器端启用WebSocket,需要安装IIS 8的WebSocket协议。在Windows Server 2012上,可以通过服务器管理器->管理->添加角色和功能来实现。展开Web服务器(IIS)角色并检查Web服务器->应用程序开发->WebSocket协议。可能会被要求安装依赖项,只需允许它们。然后安装选择的所有内容。Windows 8应该类似。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485