socket.io
Socket.IO API 提供强大的工具,用于管理客户端与服务器之间的实时双向通信。它包括 SocketManager(用于管理多个命名空间)和 SocketIOClient(用于单个 socket 连接)。以下是该 API 的详细使用指南,包括设置、配置和常见用例。
入门
通过 SocketManager 创建和管理 WebSocket 连接。每个 SocketManager 可以管理多个命名空间和配置。
示例:
API 参考
SocketManager
构造函数
constructor(url: string, config?: SocketManagerConfig)
url:Socket.IO 服务器的 URL。config:可选的配置对象。
属性
socketURL: string:服务器 URL。status: SocketIOStatus:连接状态(如connected、connecting、disconnected等)。defaultSocket: SocketIOClient:默认命名空间("/")的 socket。
方法
-
socket(namespace: string): SocketIOClient
返回指定命名空间的SocketIOClient。 -
setConfigs(config: SocketManagerConfig): void
更新管理器配置。 -
disconnect(): void
断开所有由此实例管理的 socket 连接。 -
reconnect(): void
尝试重新连接服务器。
SocketIOClient
属性
id: string | null:socket 连接的唯一标识符。status: SocketIOStatus:客户端连接状态(如connected、connecting等)。
方法
-
connect(): void
发起连接。 -
disconnect(): void
断开连接。 -
emit(event: string, data: any): void
向服务器发送带有数据的事件。 -
on(event: string, callback: (data: any[], ack: (value?: any) => void) => void): void
注册事件监听器。
配置
通过 SocketManagerConfig 对象自定义连接行为。
关键选项:
compress:启用 WebSocket 传输的压缩。connectParams:连接 URL 中包含的 GET 参数。cookies:在初始连接中发送的 cookies。forceNew:确保每次连接都创建一个新的引擎实例。reconnects:启用自动重连。reconnectAttempts:最大重连次数。reconnectWait:重连尝试之间的最小时间(秒)。
示例:
常见用例
发送和监听事件
处理重连
使用命名空间
最佳实践
- 生命周期管理:不再需要时调用
disconnect()。 - 命名空间隔离:为逻辑上不同的通信通道使用独立命名空间。
- 重连策略:根据应用需求配置重连参数。
- 错误处理:注册
on("error")监听器以优雅地处理连接问题。 - 安全连接:对于敏感数据,使用安全 WebSocket(WSS),并配置
secure: true。
