我正在重新使用现有的专有套接字包装代码来使用boost asio,以便它可以为我们做一些繁重的工作。也许我们现有代码中最复杂的区域是多播处理代码。该代码允许我们的中间层服务器(在一个系统中可以有多个)将多播发送到客户端盒,客户端盒用于向系统用户提供更新。
代码复杂且容易出错的原因是它使用了许多原始缓冲区来根据它们的来源重新组合多播流。似乎即使使用Boost.Asio,我也不得不处理同样的问题,所以在我陷入困境之前,我认为值得问别人如何应对这种情况。
这似乎是一个非常常见的用例。如果没有我现在的代码,有没有什么可以帮助我完成这项工作?或者是否有一个已建立的C ++模板(Boost或其他)可以做这种工作?
显然,我可以让自己更轻松,并使用STL容器缓冲数据包而不是原始数组,但这段代码需要非常高的性能。在大型安装中,有大量数据包飞来飞去,它需要尽可能快地响应。
提前感谢您对此事的任何想法。
杰米
答案 0 :(得分:2)
听起来您没有提供足够的详细答案信息,但有一些通用指针需要考虑实时处理组播数据。
std::vector
与原始动态分配的字符缓冲区相同。不要因为它是一个抽象层而回避使用它。但是,有两种情况你应该避免它:
swap()
可能就足够了)writev
和readv
。我不相信任何罐装解决方案都能解决您的问题。 Boost ASIO,libevent
等都将为您处理套接字抽象,但是一旦交付,您对数据的处理仍然是您的责任。