|
|
1
12
拆包方式类似:
|
|
|
2
3
|
|
|
3
1
我确信我会被C++狂热分子所大声喊叫,但是
|
|
|
4
1
|
|
|
5
0
即使在同一台机器上(或者在同一个进程中),也无法通过套接字发送向量。 这有两个问题:
所以规则是这样的:为了通过套接字发送一个对象,它必须是memcpy'd。有几种方法可以做到这一点
数字3适用于实际存在的所有用例,因为reader很少修改recv缓冲区的内容。如果读者不需要随机访问迭代器,并且可以使用ForwardIterators,那么序列化就相当简单:分配一个缓冲区来保存所有字符串,每个字符串加上一个整数表示长度,再加上一个int表示向量的大小。 结果可以重新解释为用户定义的结构,该结构是只读字符串的只读集合。因此,不需要太多麻烦,至少可以在读取端得到O(1)。 要在发送端得到O(1),你必须使用方法2。我已经这样做了,因为我知道我的应用程序永远不会使用超过X长度的字符串,并且向量永远不会包含超过Y个项目。诀窍是,修复容量我永远不必去堆内存。缺点是您发送的是每个字符串的全部容量,而不仅仅是所使用的内容。然而,在许多情况下,发送所有内容要比压缩快得多,尤其是在同一台机器上——在这种情况下,您可以将此结构放入共享内存中,并通知recv应用程序查找它。 您可能想看看boost进程间处理,以获得更多关于如何使容器在没有序列化的情况下通过套接字的想法。 |