WebSocket消息格式求助:带%符号的非标准JSON解析与发送问题
WebSocket自定义协议解析与发送方案
一、%符号的含义
这是一套自定义的WebSocket消息协议,%是字段分隔符,用来把消息拆分成不同的协议头字段和业务数据部分。你的消息拆解后对应模块:
%xt%:协议类型标识(自定义消息前缀,用于服务器识别消息类别)EmpireEx_2:业务模块/指令集名称(服务器端对应的处理模块标识)ssi:子操作类型(具体的指令动作标记)1:附加参数(可能是版本号、会话ID或参数标记){"TX":438,"TY":1218,"KID":1}:实际承载业务逻辑的JSON数据
末尾的%是消息结束符,用来标记整个消息的边界。
二、正确的发送方法
这个格式不是纯JSON,是自定义协议头+JSON数据的复合结构,不能直接用JSON工具或URL编码工具处理,正确步骤如下:
- 先构造业务JSON对象:
const businessData = { "TX": 438, "TY": 1218, "KID": 1 };
- 按照协议格式拼接成完整消息字符串:
const wsMessage = `%xt%EmpireEx_2%ssi%1%${JSON.stringify(businessData)}%`;
- 直接通过WebSocket实例发送这个拼接好的字符串:
ws.send(wsMessage); // ws为你的WebSocket实例
三、为什么之前的方法无效
JSON.stringify/JSON.parse:这类工具仅处理标准JSON结构,你的消息包含协议头和分隔符,不属于纯JSON,直接处理会触发解析错误。encodeURI/decodeURI:这类工具用于URL编码转义,而此处的%是协议规定的分隔符,不是URL转义字符,使用后会把%转成%25,破坏原有协议格式,导致服务器无法识别。
内容的提问来源于stack exchange,提问作者Jeffrey
相关产品推荐
相关产品推荐

