ConnectionConfig

class in UnityEngine.Networking

切换到手册

描述

此类定义两个对等方之间的连接的参数,此定义包含各种超时和大小以及通道配置。

此类的实例可用于配置 NetworkServer 和 NetworkClient 类。这样,ConnectionConfig 中的设置便可应用到这些对象所拥有的 NetworkConnection 的传输层连接。

NetworkManager 有一个 ConnectionConfig 对象,可用于配置该对象创建的服务器和客户端。

网络系统的高级组件使用的默认通道连接配置为: * 通道 0 - 经过排序的可靠通道 * 通道 1 - 不可靠通道。

在 Editor 中,可以使用适用于 NetworkManager 的 Inspector UI 修改此 ConnectionConfig 实例的一些属性。

重要信息:ConnectionConfig 的一些参数应与所连接对等方的参数完全相同。如果它们不相同,则在尝试建立连接时会收到 CRCMismatch 错误。

这些参数为:
- PacketSize
- FragmentSize
- ResendTimeout
- DisconnectTimeout
- ConnectTimeout
- PingTimeout
- ReducedPingTimeout
- AllCostTimeout
- IsAckLong
- UsePlatformSpecificProtocols。

变量

AckDelay定义接收方在其发回确认信息(不等待任何数据有效负载)之前持续等待的时间(以毫秒为单位)。默认值 = 33。向服务器发送数据的网络客户端可能会使用多种不同的服务质量 (QOS) 模式来执行此操作,其中一些模式(可靠模式)会希望服务器发回所发送数据的收到确认信息。服务器必须通过向客户端发回包含确认数据(也称为“acks”)的数据包定期确认通过采用可靠 QOS 模式的渠道接收的数据包。如果服务器在从客户端收到每个数据包后都立即发送确认信息,开销可能会很大(确认信息是 32 或 64 位整数,与整个数据包大小 [其中还包含 IP 和 UDP 标头] 相比,这非常小)。借助 AckDelay,服务器有时可以累积要确认的已接收可靠数据包列表,通过将多次确认合并到一个数据包降低流量开销。
AcksType确定用于存储待确认可靠消息的缓冲区的大小。此值可设置为 Acks32、Acks64、Acks96 或 Acks128。缓冲区可存储 32 条、64 条、96 条或 128 条消息,具体取决于此设置。默认值 = Ack32。通过可靠服务质量发送的消息在等待对等方确认时会存储在特定的缓冲区。此缓冲区的大小可以是 32、64、96 或 128 个位置。建议起初将此值设置为 Ack32,此值规定缓冲区在大小方面最多可存储 32 条消息。如果您在发送可靠消息后收到 NoResources 错误,请将此值更改为下一个可能的大小。
AllCostTimeout定义超时值(以毫秒为单位),通过 AllCost 通道发送的消息在达到此值后就会重新发送,而不会等待确认。默认值 = 20 ms。AllCost 交付服务质量 (QOS) 是专用于传递游戏关键型信息(例如游戏启动时间或发射子弹时间)的 QOS。由于会出现丢包现象,有时可能会无法传递可靠消息,这时则需要重新发送此类消息。可靠消息将在 RTT + 增量时间(RTT 即往返时间)之后重新发送,其中 RTT 是一个动态值,可达数百毫秒。对于 AllCost 传递通道,用户可以定义此超时值,以强制重新发送游戏关键型信息。
BandwidthPeakFactor定义可在爆发情况下使用的最大带宽(在内部乘以 InitialBandwidth)。
ChannelCount当前配置中的通道数(只读)。
Channels属于当前配置的通道的列表。注意:作为参数传递到 Unity Multiplayer 中某个函数的所有 ConnectionConfig 都会进行深度复制(即创建一个全新的副本,完全不引用原始配置)。
ConnectTimeout库发送另一个连接请求之前将等待的超时值 (ms)。
DisconnectTimeout定义将连接视为已断开之前的超时值(以毫秒为单位)。默认值 = 2000。Unity Multiplayer defines conditions under which a connection is considered as disconnected. Disconnection can happen for the following reasons: (1) A disconnection request was received. (2) The connection has not received any traffic at all for a time longer than DisconnectTimeout (Note that live connections receive regular keep-alive packets, so in this case "no traffic" means not only no user traffic but also absence of any keep-alive traffic as well). (3) Flow control determines that the time between sending packets is longer than DisconnectTimeout. Keep-alive packets are regularly delivered from peers and contain statistical information. This information includes values of packet loss due to network and peer overflow conditions. Setting NetworkDropThreshold and OverflowDropThreshold defines thresholds for flow control which can decrease packet frequency. When the time before sending the next packet is longer than DisconnectTimeout, the connection will be considered as disconnected and a disconnect event is received.
FragmentSize为碎片化消息定义碎片大小(对于 QOS:ReliableFragmented 和 UnreliableFragmented)。默认值 = 500。在碎片化服务质量模式下,原始消息被拆分成多个碎片(最多 64 个),每个碎片最大为 FragmentSize 字节。碎片大小取决于发送的可靠消息的频率和大小。每条可靠消息都可能会重新发送,因此,您选择的碎片大小需要小于 UDP 数据包中添加重新传输的可靠消息之后剩余的可用空间。例如,如果 ConnectionConfig.PacketSize 为 1440 字节,一条可靠消息的平均大小为 200 字节,那么明智的做法是将此参数设置为 900 – 1000 字节。
InitialBandwidth获取或设置可供 Unity Multiplayer 使用的带宽(字节/秒)。不允许流量超过此限制。Unity Multiplayer 可能会因流程控制而在内部减少其使用的带宽。默认值为 1.5 MB/sec(每秒 1,536,000 字节)。特意将默认值设置为一个较大的值,可在传递所有流量时不出现延时。
MaxCombinedReliableMessageCount定义可包含到一个合并消息中的可靠小消息的最大数量。默认值 = 10。因为发送到服务器的每条消息都包含 IP 信息和 UDP 标头,所以在频繁发送许多小消息时,如果发送的每条消息都含有此类重复信息,将非常低效。许多可靠小消息都可以合并成一条较长的可靠消息,以节省等待缓冲区中的空间。Unity Multiplayer 会自动将多达 MaxCombinedReliableMessageCount 条小消息合并成一条消息。要符合小消息资格要求,消息的数据有效负载不应超过 MaxCombinedReliableMessageSize。
MaxCombinedReliableMessageSize定义那些被认为足够小、可以包含到一条合并消息中的可靠消息的最大大小(以字节为单位)。默认值 = 100。因为发送到服务器的每条消息都包含 IP 信息和 UDP 标头,所以在频繁发送许多小消息时,如果发送的每条消息都含有此类重复信息,将非常低效。许多可靠小消息都可以合并成一条较长的可靠消息,以节省等待缓冲区中的空间。Unity Multiplayer 会自动将多达 MaxCombinedReliableMessageCount 条小消息合并成一条消息。要符合小消息资格要求,消息的数据有效负载不应超过 MaxCombinedReliableMessageSize。
MaxConnectionAttempt定义 Unity Multiplayer 在报告无法建立连接之前可以在未收到响应时尝试发送连接请求的最大次数。默认值 = 10。
MaxSentMessageQueueSize定义可排队等候发送的最大消息数量。默认值 = 128。此缓冲区用于缓解流量高峰情况,降低网络的不稳定性。如果队列已满,对 Send() 的所有调用都会生成一个 NoResources 错误。如果设置的此值超过 300,则可能会导致消息传递出现重大延时并导致游戏不可玩。
MinUpdateTimeout定义数据包发送间隔的最短时间(以毫秒为单位)。此持续时间将按照流程控制需要自动延长。默认值 = 10。调用 Send() 时,Unity Multiplayer 不是立即发送消息,而是在经过每个 SendTimeout 毫秒数之后,检查每个连接是否有要发送的内容。初始发送超时和最短发送超时都是可以设置的,这些值可能会由于网络状况或缓冲区溢出而在内部增加。
NetworkDropThreshold定义在 SendUpdate 超时自动增加(发送率自动降低)之前由于网络状况而需要丢弃的数据包的百分比(从 0 到 100)。默认值 = 5。To avoid receiver overflow, Unity Multiplayer supports flow control. Each ping packet sent between connected peers contains two values: (1) Packets lost due to network conditions. (2) Packets lost because the receiver does not have free space in its incoming buffers. Like OverflowDropThreshold, both values are reported in percent. Use NetworkDropThreshold and OverflowDropThreshold to set thresholds for these values. If a value reported in the ping packet exceeds the corresponding threshold, Unity Multiplayer increases the sending timeout for packets up to a maximum value of DisconnectTimeout.注意:无线网络的数据包丢失率通常为 5% 或以上。对于无线网络,明智的做法是将 NetworkDropThreshold 设置为 40-50%。
OverflowDropThreshold定义在 SendUpdate 超时自动增加(发送率自动降低)之前由于内部缓冲区空间不足而需要丢弃的数据包的百分比(从 0 到 100)。默认值 = 5。To avoid receiver overflow, Unity Multiplayer supports flow control. Each ping packet sent between connected peers contains two values: (1) Packets lost due to network conditions. (2) Packets lost because the receiver does not have free space in its incoming buffers. Like NetworkDropThreshold, both values are reported in percent. Use NetworkDropThreshold and OverflowDropThreshold to set thresholds for these values. If a value reported in the ping packet exceeds the corresponding threshold, Unity Multiplayer increases the sending timeout for packets up to a maximum value of DisconnectTimeout.注意:无线网络的数据包丢失率通常为 5% 或以上。对于无线网络,明智的做法是将 NetworkDropThreshold 设置为 40-50%。
PacketSize定义最大数据包大小(以字节为单位,包括有效负载和所有标头)。数据包内可包含多条消息。默认值 = 1500。Note that this default value is suitable for local testing only. Usually you should change this value; a recommended setting for PC or mobile is 1470. For games consoles this value should probably be less than ~1100. Wrong size definition can cause packet dropping.
PingTimeout定义保持活动状态的数据包(也称为 ping)之间的持续时间(以毫秒为单位)。默认值 = 500。ping 频率的大小应足够长,可以累积优质的统计信息;应足够短,可以与 DisconnectTimeout 进行比较。一个比较可行的指导原则是,在每次断开连接超时期间执行 3 次以上的 ping 操作,每次 ping 操作处理 5 条以上的消息。例如,当 DisconnectTimeout 为 2000 ms 时,将 PingTimeout 设置为 500 ms 可以很好地运行。
ResendTimeout定义在重新发送“未确认的”消息之前等待的最长时间(以毫秒为单位)。默认值 = 1200。长时间等待确认没有意义。此参数会设置一个时间上限,达到此值时,会重新发送可靠消息。
SendDelay获取或设置从调用 Send() 到发送数据包之前这之间的延时(以毫秒为单位)。在此期间,新消息会合并到队列中的数据包中。默认值:10 ms。
SSLCAFilePath定义指向其中包含证书颁发机构 (CA) 颁发的证书的文件的路径(适用于基于 SSL 通信的 WebSocket)。
SSLCertFilePath定义指向 SSL 证书文件的路径(适用于基于 SSL 通信的 WebSocket)。
SSLPrivateKeyFilePath定义指向其中包含私钥的文件的路径(适用于基于 SSL 通信的 WebSocket)。
UdpSocketReceiveBufferMaxSize定义用于接收 UDP 套接字的缓冲区的大小(以字节为单位)。将此参数设置为与碎片化消息的最大大小相同的值将非常有用。默认值是特定于操作系统的(通常为 8 KB)。
UsePlatformSpecificProtocols启动服务器时,使用的协议应是可在适当的情况下使用特定于平台的优化选项,而不是跨平台协议。(仅适用于 Sony 游戏主机。)
WebSocketReceiveBufferMaxSize仅限 WebSocket。定义在 WebSocket 主机上用于接收帧的缓冲区的大小(以字节为单位)。如果此值为 0(默认值),将使用 4 KB 的缓冲区。如果此值为其他任何值,将使用相应大小的缓冲区(以字节为单位)。WebSocket 消息碎片称为“帧”。WebSocket 主机有一个缓冲区,用于存储传入消息帧。因此,此缓冲区应设置为支持的最大合法帧大小。如果传入的帧超出缓冲区大小,系统不报任何错误。但是,缓冲区将调用用户回调,以针对溢出腾出空间。

构造函数

ConnectionConfig将创建默认连接配置或从其他连接配置中进行复制。

公共函数

AddChannel向配置中添加新通道并返回此通道的唯一 ID。通道是对等方之间的流量逻辑分隔符。在每次向对等方发送数据时,您应使用两个 ID:连接 ID 和通道 ID。通道不仅是逻辑上独立的流量,而且能够使用不同的服务质量 (QOS) 进行配置。在下面的示例中会创建一个配置,其中包含类型为不可靠和可靠 QOS 的两种通道。之后,此配置会用于发送数据。
GetChannel返回为指定通道设置的 QoS,或抛出超出范围异常。

静态函数

Validate验证连接配置的参数。如果参数不正确,将抛出异常。