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

如何过滤WebSocket接收的无效数据,仅保留浮点型数据用于实时计算?

实现方案

前置调整

你需要先做两处逻辑修正,避免原有流程出现bug:

  1. 调整判断顺序:将<EOF>结束标记的校验放在浮点类型判断之前。原有逻辑中<EOF>本身不属于浮点型数值,会先进入非浮点分支执行continue,永远无法触发断开连接的逻辑。
  2. 提前定义非浮点数据的存储载体:如果服务端是多连接并发场景,推荐使用线程安全的ConcurrentQueue<string>(需引入System.Collections.Concurrent命名空间)存储所有非浮点字符串,避免多线程读写冲突;如果仅需保留最新的一条非浮点数据,可使用带锁的静态字符串变量。

非浮点分支逻辑实现

首先在类层面定义存储容器,示例(多连接场景):

// 全局非浮点数据存储,其他模块可直接消费该队列内容
public static ConcurrentQueue<string> NonFloatDataCollection = new ConcurrentQueue<string>();

对应接收逻辑的修改如下:

data = Encoding.ASCII.GetString(bytes, 0, bytesRec); 

// 优先判断EOF结束标记
if (data.IndexOf("<EOF>") > -1)
{
    break;
}

is_float = float.TryParse(data, out float floatValue);
if (is_float == false) 
{
    // 将非浮点字符串存入独立存储
    NonFloatDataCollection.Enqueue(data);
    // 跳过后续浮点计算逻辑,直接读取下一条数据
    continue;
}

// 后续核心实时计算直接使用解析好的floatValue变量即可,不要使用原始的data字符串

如果只需要保存最新的一条非浮点数据,存储容器和分支逻辑可调整为:

// 类层面定义
private static string _latestNonFloatData;
private static readonly object _lockObj = new object();

// 非浮点分支逻辑
lock (_lockObj)
{
    _latestNonFloatData = data;
}
continue;

内容的提问来源于stack exchange,提问作者cobalt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:03