使用Tsung对Openfire进行WebSocket负载测试无法创建会话问题咨询
Tsung压测Openfire WebSocket无有效会话的补充配置方案
你当前已完成的WebSocket基础配置如下:
<option name="websocket_path" value="/ws"/> <option name="websocket_frame" value="text"/> <option name="websocket_subprotocols" value="xmpp"/>
目前仅能建立WebSocket底层连接、Openfire侧无法生成有效会话,需补充以下配置和逻辑:
- 校验Openfire侧服务配置匹配度
- 登录Openfire管理后台,在服务器设置的WebSocket配置页确认服务已启用,注意部分Openfire版本默认WebSocket路径为
/websocket而非/ws,路径不匹配会导致连接升级成功但XMPP流无法正常路由 - 确认Openfire侧配置的允许WebSocket子协议包含
xmpp,无额外自定义子协议校验规则
- 登录Openfire管理后台,在服务器设置的WebSocket配置页确认服务已启用,注意部分Openfire版本默认WebSocket路径为
- 补充XMPP流初始化交互逻辑
- 不要直接沿用纯TCP压测的会话逻辑,WebSocket连接建立后必须第一时间发送符合规范的XMPP流开场标签,Openfire只有收到合法的流初始化报文才会创建正式会话,标准开场报文格式如下:
<stream:stream to='[你的Openfire服务域名]' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> - 调整Tsung的帧匹配规则,不要全局固定websocket_frame为text后忽略服务端返回的流响应,需配置对应规则接收Openfire返回的stream特征报文,避免Tsung误判连接无效主动断开
- 不要直接沿用纯TCP压测的会话逻辑,WebSocket连接建立后必须第一时间发送符合规范的XMPP流开场标签,Openfire只有收到合法的流初始化报文才会创建正式会话,标准开场报文格式如下:
- 补全会话建立的必要交互流程
- 若Openfire开启了SASL鉴权、资源绑定要求,流初始化完成后需按XMPP协议顺序完成SASL握手、资源绑定、会话确认的报文交互,仅完成WebSocket握手升级不会生成持久有效会话
- 若压测场景不需要鉴权,可在Openfire后台临时关闭匿名登录限制,允许匿名用户直接建立会话
- 调整Tsung脚本的协议类型配置
- 不要将脚本类型设为纯
tcp,需调整为支持XMPP协议栈的类型,或在会话阶段手动指定报文解析规则为XMPP,否则Tsung不会按XMPP规范组装报文,Openfire无法识别载荷内容就不会生成有效会话
- 不要将脚本类型设为纯
内容的提问来源于stack exchange,提问作者HimS
相关产品推荐
相关产品推荐

