Websocket-Node项目中的WebSocketRequest对象详解

Websocket-Node项目中的WebSocketRequest对象详解

【免费下载链接】WebSocket-Node A WebSocket Implementation for Node.JS (Draft -08 through the final RFC 6455) 【免费下载链接】WebSocket-Node 项目地址: https://gitcode.com/gh_mirrors/web/Websocket-Node

概述

WebSocketRequest对象是Websocket-Node项目中的核心组件之一,它代表了客户端向服务器发起的WebSocket连接请求。通过这个对象,开发者可以根据自定义条件决定是否接受或拒绝连接请求。本文将深入解析WebSocketRequest的构造、属性、方法和事件,帮助开发者更好地理解和使用这一重要组件。

构造函数

WebSocketRequest对象通常由WebSocketServer内部创建,但在某些特殊场景下,开发者可能需要手动创建:

new WebSocketRequest(socket, httpRequest, config);

参数说明:

  • socket: 底层网络套接字
  • httpRequest: Node HTTP请求对象
  • config: 完整的服务器配置选项

重要注意事项:

  1. 必须提供完整的配置选项
  2. 构造后需要调用readHandshake()方法解析客户端握手信息
  3. 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方法拒绝连接时触发(无参数)。

最佳实践建议

  1. 安全验证:在接受连接前,务必验证origin和请求参数
  2. 错误处理:始终用try-catch包裹readHandshake调用
  3. 协议选择:优先选择客户端和服务器都支持的子协议
  4. 资源释放:拒绝连接后确保相关资源被正确释放
  5. 日志记录:建议记录accept/reject操作以便审计

总结

WebSocketRequest对象为开发者提供了完整的WebSocket连接请求处理能力,通过其丰富的属性和方法,可以实现灵活的连接控制策略。理解并正确使用这一组件,是构建稳定、安全WebSocket服务的基础。

【免费下载链接】WebSocket-Node A WebSocket Implementation for Node.JS (Draft -08 through the final RFC 6455) 【免费下载链接】WebSocket-Node 项目地址: https://gitcode.com/gh_mirrors/web/Websocket-Node

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值