pub struct BackendConn {
pub user_id: AtomicU32,
pub client_type: u8,
pub client_ver: u16,
pub lang_id: u8,
/* private fields */
}Expand description
后端连接
Fields§
§user_id: AtomicU32§client_type: u8§client_ver: u16§lang_id: u8Implementations§
Source§impl BackendConn
impl BackendConn
Sourcepub const CONNECT_TIMEOUT: Duration
pub const CONNECT_TIMEOUT: Duration
连接 TCP 的超时时间。
Linux 默认 tcp_syn_retries=6 时 TcpStream::connect 等到 ETIMEDOUT
需要约 127 秒——用户启动 opend 时如果选到一个不通的 IP 就卡 2 分钟后
才报错 offline mode(某位 Rocky Linux 用户踩过)。加 10s 超时快速失败,
让上层(bridge.rs 的 connect 循环)有机会 fallback 到下一个候选 IP。
Sourcepub const CLIENT_VER_FTGTW: u16 = 1030
pub const CLIENT_VER_FTGTW: u16 = 1030
Backend 侧可识别的 Rust OpenD 客户端版本号。
Rust OpenD 的后台诊断版本号。
该值与普通 C++ OpenD 拉开,便于后台排查时区分 Rust 链路。服务端若要求
version >= 800,低版本会返回 error_code=45 "当前应用版本过低"。
Sourcepub async fn connect(addr: &str, push_callback: PushCallback) -> Result<Self>
pub async fn connect(addr: &str, push_callback: PushCallback) -> Result<Self>
连接到后端服务器(带 10s 超时)
Sourcepub async fn connect_race(
addrs: &[String],
push_callback: PushCallback,
) -> Result<(Self, String)>
pub async fn connect_race( addrs: &[String], push_callback: PushCallback, ) -> Result<(Self, String)>
并发连接多个候选地址,谁先通用谁(对齐 C++ connector.cpp:175-189
ConnectStrategyAddr 的 concurrency_ip 语义)。
- 每个候选独立带
CONNECT_TIMEOUT(10s)超时 - 第一个
Ok(stream)胜出,其余 pending task drop 时会关闭半连接 - 全部失败返回最后一个错误
返回 (BackendConn, winner_addr),调用方用 winner_addr 做登录协议里的
host_ip/host_port 字段。
Sourcepub fn from_duplex(
stream: DuplexStream,
push_callback: PushCallback,
) -> Result<Self>
pub fn from_duplex( stream: DuplexStream, push_callback: PushCallback, ) -> Result<Self>
v1.4.70 D1: test-only 从 tokio::io::DuplexStream 构造 BackendConn
用于 integration tests(crates/futu-gateway/tests/common/mock_backend.rs)
替代真 TcpStream。生产路径通过 connect() → from_stream() 不变。
Sourcepub fn set_session_key(&self, key: Vec<u8>)
pub fn set_session_key(&self, key: Vec<u8>)
设置 session key(登录成功后调用)。接受变长字节,16/24/32 分别对应
AES-128/192/256。对齐 C++ Logger::session_key_ 是 std::string,
长度取决于服务端下发的 RspEncryptData.session_key 字段原始长度。
Sourcepub fn set_sec_data(&self, val: u32)
pub fn set_sec_data(&self, val: u32)
设置 sec_data 初始值(登录成功后调用)
Sourcepub fn set_client_ip(&self, ip: String)
pub fn set_client_ip(&self, ip: String)
设置登录响应里的客户端外网 IP。