You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SiLab RS9116发送WebSocket消息时遇套接字意外终止问题

RS9116 WebSocket 二次发送触发"A new message was started when a continuation frame was expected"错误解决

错误含义解析

这个错误属于WebSocket协议层面的违规:WebSocket允许将单条消息拆分为多个续帧发送,当第一帧的FIN位被设为0(表示消息未完成,需后续续帧补充),但后续未发送对应续帧,反而发送了一个带有新操作码(TEXT/BINARY等)的全新消息帧时,就会触发该错误。本质是首次发送后,WebSocket的协议状态停留在“等待续帧”的状态,二次发送新消息违反了协议规则。

排查与解决步骤

  • 确认首次发送的消息完整性参数
    检查rsi_web_socket_send_async的调用参数,找到控制FIN位的配置项(通常在flags参数中)。确保首次发送时明确设置为“完整消息”(即FIN=1),避免API默认将单次发送标记为分片消息(FIN=0)。如果未指定该参数,API可能因数据长度或默认逻辑自动开启分片,导致后续状态异常。

  • 抓包验证帧头状态
    用Wireshark抓取首次发送的WebSocket帧,查看帧头中的FIN位是否为1。若为0,说明API未正确处理单消息发送,必须手动指定FIN=1的参数配置。

  • 放弃手动管理操作码与掩码
    手动干预操作码、掩码等帧细节容易引入UTF-8解码错误,RS9116的API已封装了这些协议细节。除非需要分片发送大消息,否则应让API自动处理帧的协议字段,仅关注消息的完整性标记(FIN位)即可。

  • 等待异步发送完成再发起二次请求
    虽然首次调用返回值显示成功,但异步发送可能只是将数据放入发送队列,实际帧的协议处理尚未完成。需等待API的发送完成回调(或中断通知)确认首次发送彻底完成后,再发起第二次发送,避免状态冲突。

  • 临时验证状态残留问题
    若上述步骤无效,可在首次发送完成后,尝试关闭当前WebSocket套接字并重新创建,再发送第二份数据。若问题消失,说明是API的状态残留导致的协议状态异常,需排查是否有未正确清理的内部状态。

内容的提问来源于stack exchange,提问作者이재석

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:12:47