我目前正在尝试实现一个(T)LV协议以用于TCP之上。这个协议的一个非常早期版本是通过每send-recv对发送一个消息来构建的。 (即发送(“消息发送” - recv(...))。这是非常糟糕的带宽明智的 - 我想因为我发送非常小的数据包 所以现在我试图切换到LV协议,一次只能通过他们各自的长度分隔(现在我使用Protocol Buffers序列化我的数据)发送几条消息通过TCP实现TLV协议
我现在有两个问题:
在Python中我做
发sock.send(struct.pack("<H", len(gtMessage.SerializeToString()))) sock.send(gtMessage.SerializeToString())
如果我现在把它放到一个循环中,并发送了几个这些消息,我最终会遇到我的老问题,据我所知。我能以某种方式将字符串串起来发送吗?
- 在C++中,首先接收消息的长度,然后读取长度字段指示的字节数。
首先从TCP读取所有内容然后解析它,或者我可以读取一条消息,然后解析它,然后只读取下一个位?
编辑:所以做一些更多的研究后,我会改写的第一个问题是:
是
sock.send("somestring")
sock.send("somestring")
一样
sock.send("somestring"+"somestring")
?