【发布时间】:2011-06-03 17:04:42
【问题描述】:
我有一个字节数组,其中包含从 WebSocket 客户端接收到的数据。我拥有的数据可以是 1 次接收,也可以是缓冲数据 + 最后一次接收。这取决于天气或是否有任何数据缓冲。
现在,当接收到数据时,确实应该发生 3 种可能的事情,它们如下(注意,这是在我将接收到的数据与缓冲区连接之后):
- 已收到部分消息: 客户端开始发送消息,但只有部分消息(开头)已进入低谷。我收到的数据需要缓冲,直到收到其余数据。
- 已收到完整的消息:客户端已发送完整的消息。应随消息触发一个事件。
- 收到关闭信号:客户端已发送关闭信号的请求。
现在,没有充分的理由说明为什么不应该同时发生其中的几个(例如,收到 1 条半消息,或者收到 1 条消息并收到关闭信号)。 websocket 中的消息以字节 0x00 和 0xFF 为框架,换句话说,传入的消息看起来像这样:0x00,...binary UTF8 data,0xFF,0x00,...binary UTF8 data,0xFF,结束信号看起来像这样:0xFF,0x00。现在,我需要一种有效的方式来获取传入的数据流并将其拆分为消息或结束信号。我以前从未使用过这样的框架数据,所以我不确定如何有效地做到这一点。我想要的或多或少是一个函数,它将二进制数据作为一个数组接收,并返回消息(作为没有帧的二进制数据)或关闭标志,以及一个带有要缓冲数据的字节数组。重要的是它速度很快并且不会消耗太多不必要的内存。或者如果你有一些链接可以帮助我解决这个问题,我会很高兴地接受它们。
【问题讨论】:
标签: c# binary performance websocket