<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="">WebSocket</string>
    <string name="">WebSocket 协议允许在受控环境中运行的不受信任代码，与愿意接受该代码通信的远程主机进行双向数据交换。该协议由一个起始握手阶段和随后的基本消息帧格式组成，整个通信基于 TCP 实现。这项技术的主要目的是，为需要与服务器进行双向通信的浏览器应用提供一种解决方案，避免依赖打开多个 HTTP 连接。</string>
    <string name="">Beast 为开发者提供一套健壮的 WebSocket 实现，该实现基于 Boost.Asio 构建，并采用现代 C++ 方式和一致的异步模型。</string>
    <string name="">本文档假定读者已熟悉 Asio 及</string>
    <string name="">构造</string>
    <string name="">WebSocket 连接需要一个有状态的对象，在 Beast 中由类模板 [link beast.ref.boost__beast__websocket__stream `websocket::stream`] 表示。该接口采用分层流模型。WebSocket 流对象包含另一个流对象，称为“下一层”，用于执行 I/O 操作。各模板参数说明如下：</string>
    <string name="">WebSocket 流模板参数</string>
    <string name="">名称</string>
    <string name="">描述</string>
    <string name="">`NextLayer`</string>
    <string name="">下一层类型。该类型的对象将在流的整个生命周期内被构造并维护。所有读写操作都将通过该下一层进行。此类型必须满足 __SyncStream__、__AsyncStream__ 或两者的要求，具体取决于所执行的 I/O 风格。</string>
    <string name="">`deflateSupported`</string>
    <string name="">当该值为 `true` 时，流将支持（但不强制使用）[@https://tools.ietf.org/html/rfc7692 每消息压缩扩展]。流在握手期间是否实际请求或接受该扩展，取决于另一个可配置选项。\n\n当该值为 `false` 时，扩展将被禁用。流在客户端角色中永远不会请求该扩展，在服务器角色中也不会接受该扩展的请求。禁用扩展的另一个好处是，编译速度会更快，且生成的可执行程序包含的代码会更少。</string>
    <string name="">当构造流时，传递给构造函数的任何参数都会转发给下一层对象的构造函数。以下声明一个基于普通 TCP/IP 套接字的流，并使用一个 I/O 上下文：</string>
    <string name="">WebSocket 流使用自身协议特定的超时功能。当</string>
    <string name="">与大多数 I/O 对象类似，WebSocket 流本身 [*不是线程安全的]。如果两个不同的线程同时访问该对象，将导致未定义行为。对于多线程程序，`tcp_stream` 可以通过执行器（此处为串行器）构造。以下声明的流将使用串行器来调用所有完成处理器：</string>
    <string name="">如果下一层支持移动构造，则 WebSocket 流可以通过移动构造的方式从被移动的对象进行构造。</string>
    <string name="">可通过调用 [link beast.ref.boost__beast__websocket__stream.next_layer.overload1 `stream::next_layer`] 来访问下一层。</string>
    <string name="">使用 SSL</string>
    <string name="">若需在 SSL 上使用 WebSocket，可将 __ssl_stream__ 类模板的实例作为流的模板类型。所需的 __io_context__ 和 __ssl_context__ 参数会转发给被包装流的构造函数：</string>
    <string name="">使用 Asio SSL 类型声明 WebSocket 流对象的代码：</string>
    <string name="">与之前相同，底层 SSL 流可通过调用 `next_layer` 来访问。</string>
    <string name="">对于像上述声明的多层流，若使用链式 `next_layer` 调用来访问某一层，过程会较为繁琐。[link beast.ref.boost__beast__get_lowest_layer `get_lowest_layer`] 函数可返回分层流中最后一层（即最底层）。以下示例通过访问最底层来取消所有未完成的 I/O 操作：</string>
    <string name="">非阻塞模式</string>
    <string name="">请注意，WebSocket 流不支持非阻塞模式。</string>
</resources>
