小编Mat*_*unn的帖子

消息框架方法在.NET中的优缺点

我正在研究我所知道的两种不同TCP消息帧方法的优缺点.

  1. 定界:使用分隔符字节将TCP流分解为非固定长度的消息.例程发送数据时,必须检查分隔符的消息数据并将其转义以确保消息帧的安全传输.当接收数据时,例程必须通过流读取以查找分隔符字节以将帧分成消息.

EG:用户[用户名] \n密码[密码] \n

  1. 长度前缀:通过使用前4个字节的前缀来将TCP流分成预定大小的消息,以陈述消息的长度.当接收数据时,例程将首先读取前缀以确定消息帧的长度.发送数据时,例程必须在传输之前将长度前缀添加到消息中.

EG:[MessageLength]用户[用户名] [MessageLength]密码[密码]

这两种方法都允许传输消息帧,消息帧的大小可以变化并包含要解释的字节流.更高级别的消息结构或协议不相关.


因此,我将注意力集中在可扩展性和性能效率上.我发现自己需要运行基准测试,看看哪种方法可以获得最高的效率吞吐量,而不涉及任何消息处理.


我目前的想法,无论如何我都不是专家.

在接收例程期间,定界消息帧的效率会降低,因为需要检查流中的每个字节的消息帧定界符.长度 - 前缀消息帧将始终读取前缀字节,并且消息帧流的其余部分将直接进入缓冲区而不进行处理,直到收到整个消息帧.

其中长度前缀消息帧在发送例程期间具有较低的效率,作为在消息本身之前发送的消息前缀.


我能想到的其他因素包括:

  • 许多小消息帧将导致为长度前缀结构传输更多分组.
  • 使用长度前缀结构可以更有效地处理大量更大的消息帧,因为没有读取每个字节来检查分隔符.

这个主题的任何亮点都很棒.我发现很难找到有关TCP的消息帧结构之间差异的良好资源.

.net sockets

3
推荐指数
1
解决办法
2319
查看次数

标签 统计

.net ×1

sockets ×1