Websocket-Node项目中的WebSocketRequest对象详解
概述
WebSocketRequest对象是Websocket-Node项目中的核心组件之一,它代表了客户端向服务器发起的WebSocket连接请求。通过这个对象,开发者可以根据自定义条件决定是否接受或拒绝连接请求。本文将深入解析WebSocketRequest的构造、属性、方法和事件,帮助开发者更好地理解和使用这一重要组件。
构造函数
WebSocketRequest对象通常由WebSocketServer内部创建,但在某些特殊场景下,开发者可能需要手动创建:
new WebSocketRequest(socket, httpRequest, config);
参数说明:
socket: 底层网络套接字httpRequest: Node HTTP请求对象config: 完整的服务器配置选项
重要注意事项:
- 必须提供完整的配置选项
- 构造后需要调用
readHandshake()方法解析客户端握手信息 readHandshake()可能抛出异常,必须使用try/catch块处理
关键属性详解
1. httpRequest
指向原始的Node HTTP请求对象,可用于访问cookie、session等数据,特别适合与Express等框架集成。
2. host
包含客户端传递的Host头信息,非标准端口时会包含端口号。
示例值:
www.example.com
www.example.com:8080
3. resource & resourceURL
resource: 客户端请求的路径字符串resourceURL: 解析后的URL对象,包含查询参数等详细信息
4. remoteAddress
客户端IP地址字符串,支持X-Forwarded-For头信息,适用于反向代理后的服务器。
5. webSocketVersion
客户端请求的WebSocket协议版本号(注意:原websocketVersion属性已弃用)。
6. origin
表示连接来源:
- 浏览器客户端:包含发起连接的页面URL
- 非浏览器客户端:可能为null或"*"
7. requestedExtensions
客户端请求的扩展列表(当前版本未实际使用)。
数据结构示例:
[
{
name: "compression-extension",
params: [
{ name: "level", value: "9" }
]
}
]
8. requestedProtocols
客户端支持的子协议列表(已转换为小写),服务器应从中选择支持的协议。
核心方法
accept(acceptedProtocol, allowedOrigin)
接受连接请求并建立WebSocket连接。
参数说明:
acceptedProtocol: 选择的子协议(必须为客户端请求的协议或null)allowedOrigin: 对于浏览器客户端必须指定origin
返回值: 已建立的WebSocketConnection实例
使用示例:
const connection = request.accept('chat-protocol', request.origin);
reject([httpStatus], [reason])
拒绝连接请求。
可选参数:
httpStatus: HTTP状态码(如403)reason: 拒绝原因文本(通过X-WebSocket-Reject-Reason头发送)
使用示例:
request.reject(403, "Access denied");
事件系统
requestAccepted
当调用accept方法成功建立连接时触发。
事件参数:
webSocketConnection: 可用的WebSocket连接实例
requestRejected
当调用reject方法拒绝连接时触发(无参数)。
最佳实践建议
- 安全验证:在接受连接前,务必验证origin和请求参数
- 错误处理:始终用try-catch包裹readHandshake调用
- 协议选择:优先选择客户端和服务器都支持的子协议
- 资源释放:拒绝连接后确保相关资源被正确释放
- 日志记录:建议记录accept/reject操作以便审计
总结
WebSocketRequest对象为开发者提供了完整的WebSocket连接请求处理能力,通过其丰富的属性和方法,可以实现灵活的连接控制策略。理解并正确使用这一组件,是构建稳定、安全WebSocket服务的基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



