如何过滤WebSocket接收的无效数据,仅保留浮点型数据用于实时计算?
实现方案
前置调整
你需要先做两处逻辑修正,避免原有流程出现bug:
- 调整判断顺序:将
<EOF>结束标记的校验放在浮点类型判断之前。原有逻辑中<EOF>本身不属于浮点型数值,会先进入非浮点分支执行continue,永远无法触发断开连接的逻辑。 - 提前定义非浮点数据的存储载体:如果服务端是多连接并发场景,推荐使用线程安全的
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
相关产品推荐
相关产品推荐

