如何使用高级 WebSocket 控件 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
本主题介绍了在 Windows 运行时应用中使用 MessageWebSocket 和 StreamWebSocket 功能时,如何使用高级套接字控件。
你需要了解的内容
技术
-
支持使用套接字和 WebSocket 进行网络通信。
先决条件
- 本主题中的示例以 JavaScript 语言提供。建议对 WebSocket 有一个基本的了解。
高级 WebSocket 控件概述
MessageWebSocket 和 StreamWebSocket 类在使用高级控件时遵循相同的模型。与上述主类对应的是访问高级控件的相关类:
- MessageWebSocketControl - 提供 MessageWebSocket 对象上的服务质量的套接字控件。
- StreamWebSocketControl - 提供 StreamWebSocket 对象上的套接字控件数据。
使用高级控件的基本模式对于两类 WebSocket 是相同的。 以下讨论以 StreamWebSocket 为示例,但对于 MessageWebSocket 也可以使用同样的过程。
- 创建 StreamWebSocket。
- 使用 StreamWebSocket.Control 属性获取与 StreamWebSocket 对象相关的 StreamWebSocketControl 实例。
- 设置 StreamWebSocketControl 上的属性,以设置高级套接字选项。
应用必须总是在发出连接操作之前设置 StreamWebSocketControl 上的属性。因此,最好是在创建套接字之后立即设置高级选项。请勿在套接字已调用 ConnectAsync 方法之后尝试设置 StreamWebSocketControl 属性。
高级 StreamWebSocket 控件
StreamWebSocket 上有数个高级选项。
- StreamWebSocketControl.NoDelay - 指示 StreamWebSocket 对象是否使用了 Nagle 算法。
- StreamWebSocketControl.OutboundBufferSizeInBytes - 控制用于发送 StreamWebSocket 对象上数据的发送缓冲区的大小(以字节为单位)。
- StreamWebSocketControl.ProxyCredential - 使用 StreamWebSocket 对象提供用于通过 HTTP 标头身份验证对代理服务器进行验证的凭据。
- StreamWebSocketControl.ServerCredential - 使用 StreamWebSocket 对象提供用于通过 HTTP 标头身份验证对 WebSocket 服务器进行验证的凭据。
- StreamWebSocketControl.SupportedProtocols - 获取可用于添加到受支持子协议列表的集合,这些协议将在连接握手期间向服务器公布。
让我们来详细了解 StreamWebSocketControl.NoDelay 选项,并以该选项作为示例。创建了 StreamWebSocket 时,该选项的默认设置为 true,这会禁用 Nagle 算法。但是,如果为发送许多小数据包的应用使用 StreamWebSocket,并且延迟不是问题,则可通过将 StreamWebSocketControl.NoDelay 设置为 false 来启用 Nagle 算法,从而减少网络流量。
以下示例将会创建一个 StreamWebSocket 并将 StreamWebSocketControl.NoDelay 设置为 false。一旦此操作完成,该应用即可连接 StreamWebSocket
var clientWebSocket = new Windows.Networking.Sockets.StreamWebSocket();
// Get the current setting for this option
// This isn't required, but it shows how to get the current setting
var currentSetting = clientWebSocket.control.noDelay;
// Set noDelay to false so that the Nagle algorithm isn't disabled
clientWebSocket.control.noDelay = false;
// Now you can call the ConnectAsync method to connect the StreamWebSocket.
高级 MessageWebSocket 控件
MessageWebSocket 上的许多高级选项与 StreamWebSocket 上的高级选项相同,但也存在一些差异。
- MessageWebSocketControl.MaxMessageSize - 控制消息大小的上限(以字节为单位),以便在 MessageWebSocket 对象上配置 WebSocket 消息。
- MessageWebSocketControl.MessageType - 控制要在 MessageWebSocket 对象上配置的 WebSocket 消息的类型(二元或 UTF-8)。
- MessageWebSocketControl.OutboundBufferSizeInBytes - 控制用于发送 MessageWebSocket 对象上数据的发送缓冲区的大小(以字节为单位)。
- MessageWebSocketControl.ProxyCredential - 使用 MessageWebSocket 对象提供用于通过 HTTP 标头身份验证对代理服务器进行验证的凭据。
- MessageWebSocketControl.ServerCredential - 使用 MessageWebSocket 对象提供用于通过 HTTP 标头身份验证对 WebSocket 服务器进行验证的凭据。
- MessageWebSocketControl.SupportedProtocols - 获取可用于添加到受支持子协议列表的集合,这些协议将在连接握手期间向服务器公布。
MessageWebSocket 的选项设置过程与上例相同。
备注
除了控件数据之外,你还可以通过一组相似的相关类来访问上述主类的其他信息:
- MessageWebSocketInformation - 提供 MessageWebSocket 对象上的套接字信息。
- StreamWebSocketInformation - 提供 StreamWebSocket 对象上的套接字信息。
这些类的一些属性提供了套接字的其他信息。
相关主题
其他
如何使用 TLS/SSL 确保 WebSocket 连接的安全
参考
示例