我在现有的 TCP 库之上构建了一个简单的多路复用协议。这允许我在单个 TCP 连接中拥有多个“通道”。当所有数据都向一个方向发送时,它工作得很好。例如,我可以通过一个通道发送文件并在另一个通道上发送消息。当所有数据都向一个方向发送时,一切正常:
TCP 连接:
通道 1 --- 文件上传 ---> 通道 1
通道 2 --- 消息 ------> 通道 2
当我尝试在一个方向上传并在另一个方向发送消息时会出现问题:
频道 1 --- 文件上传 --> 频道 1
频道 2 <---- 消息 ---- 频道 2
文件传输正常,但消息(通常)在文件完成传输之前不会传输。这是 TCP 流的已知问题吗?
具体来说,我使用 google 的 libjingle 库来建立单个 TCP 连接(实际上它是一个伪 TCP over UDP 实现)。我确信消息数据实际上是通过流发送的,但另一方面,直到文件在通道 1 上完成上传后才会触发 SE_READ 事件。
我当然不是 TCP 方面的专家,希望能得到任何帮助。谢谢。