在 UDP 上运行 STUN 时,STUN 消息可能会被网络丢弃。 STUN 请求/响应事务的可靠性通过客户端应用程序本身重传请求消息来实现。
客户端应从 RTO("重传超时")间隔开始重传 STUN 请求消息,每次重传后加倍。RTO 是往返时间的估算值。
默认情况下,sgcWebSockets STUN 客户端已配置为 RTO 500 ms 和最大重试次数 7 次。
例如,假设 RTO 为 500 毫秒,请求将在 0 毫秒、500 毫秒、1500 毫秒、3500 毫秒、7500 毫秒、15500 毫秒和 31500 毫秒时发出。如果客户端在 39500 毫秒后仍未收到响应,则认为事务已超时。
oSTUN := TsgcSTUNClient.Create(nil);
oSTUN.Host := 'stun.sgcwebsockets.com';
oSTUN.Port := 3478;
oSTUN.RetransmissionOptions.Enabled := true;
oSTUN.RetransmissionOptions.RTO := 500;
oSTUN.RetransmissionOptions.MaxRetries := 7;
oSTUN.SendRequest;