加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在Windows上使用boost :: asio发送的组播性能差

发布时间:2020-12-16 05:43:43 所属栏目:百科 来源:网络整理
导读:我有一个非常简单的包装器boost :: asio套接字发送多播消息: // headerclass MulticastSender{public: /// Constructor /// @param ip - The multicast address to broadcast on /// @param port - The multicast port to broadcast on MulticastSender(con
我有一个非常简单的包装器boost :: asio套接字发送多播消息:
// header
class MulticastSender
{
public:

    /// Constructor
    /// @param ip - The multicast address to broadcast on
    /// @param port - The multicast port to broadcast on
    MulticastSender(const String& ip,const UInt16 port);

    /// Sends a multicast message
    /// @param msg - The message to send
    /// @param size - The size of the message (in bytes)
    /// @return number of bytes sent
    size_t send(const void* msg,const size_t size);

private:

    boost::asio::io_service m_service;
    boost::asio::ip::udp::endpoint m_endpoint;
    boost::asio::ip::udp::socket m_socket;

};

// implementation
inline MulticastSender::MulticastSender(const String& ip,const UInt16 port) :
    m_endpoint(boost::asio::ip::address_v4::from_string(ip),port),m_socket(m_service,m_endpoint.protocol())
{
    m_socket.set_option(boost::asio::socket_base::send_buffer_size(8 * 1024 * 1024));
    m_socket.set_option(boost::asio::socket_base::broadcast(true));
    m_socket.set_option(boost::asio::socket_base::reuse_address(true));
}

inline size_t MulticastSender::send(const void* msg,const size_t size)
{
    try
    {
        return m_socket.send_to(boost::asio::buffer(msg,size),m_endpoint);
    }
    catch (const std::exception& e)
    {
        setError(e.what());
    }
    return 0;
}

// read and send a message
MulticastSender sender(ip,port);
while(readFile(&msg)) sender.send(&msg,sizeof(msg));

当使用Visual Studio 2013在Windows 7上编译时,我在Ubuntu 14.04?100 MB / s时可以获得?11 MB / s的吞吐量.我添加了计时器,并且能够验证发送(…)方法是罪魁祸首.

我尝试使用和不启用防病毒功能,并尝试禁用其他几项服务,没有运气.有些我无法通过计算机上的权限禁用,如防火墙.

我假设Windows上运行的服务是干扰的,或者我的实现缺少在Windows而不是Linux上影响应用程序的一些.

任何关于可能正在考虑的想法将不胜感激

解决方法

Windows和ubuntu是否在同一台机器上运行?

如果没有,似乎你的Windows机器受到100Mbit以太网的限制,而ubuntu机器似乎与1Gbit以太网一起使用.

(如果不是问题的原因,我很抱歉发布anwser而不是评论,但我不能这样做,你的代码是那么简单,数据速率是如此明显[11 * 8MB / s? 100Mbit / s和100MB / s?800Mbit / s],我只需要提示…)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读