gpt4 book ai didi

c++ - 将消息片段连接在一起

转载 作者:行者123 更新时间:2023-11-28 07:34:18 24 4
gpt4 key购买 nike

我需要编写一个函数来接收不同消息的片段,然后将它们拼凑起来。片段以类 msg 的形式存在,其中包含

的信息
int message_id
int no_of_fragments
int fragment_id
string msg_fragment

函数需要做以下事情

  1. 检查收到的消息 - 如果 no_of_fragments == 1 那么消息没有被分片,函数可以在这里停止
  2. 如果 no_of_fragments > 1 那么消息是分片的
    • 获取message_idfragment_id
    • 收集所有片段对于 message_id=111 且 no_of_fragments=6,系统应确保收集了 fragments_id 1-6
    • 拼凑碎片

执行此操作的最佳方法是什么?我认为 map 可能会有用(使用 message_id 作为键,指向将保存片段的容器),但会感谢任何建议。

谢谢!

最佳答案

我会使用 vector map 。每次收到新消息 ID 时,将其用作映射键。然后根据收到的第一个片段中指定的片段数分配一个 vector 来保存片段(不必按顺序)。您还需要保留计数,因此很容易知道何时收到最后一个片段,因此可能是 message_id 到计数结构和片段 vector 的映射。

我的 C++ 生锈了:

struct message_parts {
int fragments_expected; // init to no_of_fragments
int fragments_received; // init to 0 (you'll bump it as soon as you add the fragment to the vector)
vector<fragment *> fragments; <-- initialize size to no_of_fragments
}

std::map<int, message_parts> partial_messages

插入片段时,根据片段 ID - 1(因为它们是零索引)将其直接放入片段 vector 中的位置。这样,无论它们以何种顺序出现,您总能以正确的顺序排列它们。

添加片段后,检查 fragments_received == fragments 是否符合预期,然后您可以将其拼凑并处理数据。

这提供了恒定时间第一片段检测和分配、恒定时间片段插入、恒定时间完整消息接收检测和线性时间消息重建(没有比这更好的了)。

此解决方案不需要为非碎片化数据使用特殊外壳。

不要忘记在将片段重新组合成完整消息后将其删除。

关于c++ - 将消息片段连接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com