繁体   English   中英

boost asio异步udp服务器-性能不佳

[英]boost asio async udp server - poor performance

我编写了一个boost asio异步udp服务器,并测量了从发送短ping消息到接收到返回的ping消息之后,客户端的时间。 我在家庭网络中对此进行了测量,因此我希望结果会非常好。

不幸的是,消息到达我的另一台计算机并返回该计算机所花费的平均时间始终约为4毫秒(在2个不同的本地网络中进行了测试)。

当我编写最简单的服务器时,我现在想知道是否以及如何提高性能。

.hpp

class udp_server2 {
    boost::asio::ip::udp::socket socket;
    boost::asio::streambuf read_buffer;
    boost::asio::ip::udp::endpoint read_endpoint;

    void receive();
    void handle_receive(const boost::system::error_code& ec, std::size_t bytes_transferred);
    void send(const boost::asio::ip::udp::endpoint& endpoint, const boost::asio::streambuf& data);
    void handle_send(const boost::system::error_code& ec, std::size_t bytes_transferred);

public:
    udp_server2(boost::asio::io_service& io_service);
};

.cpp

udp_server2::udp_server2(boost::asio::io_service& io_service) :
    socket(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 1337)) {
    receive();
}


void udp_server2::receive() {
    socket.async_receive_from(read_buffer.prepare(10000), read_endpoint, boost::bind(&udp_server2::handle_receive, this, _1, _2));
}

void udp_server2::handle_receive(const boost::system::error_code& error, std::size_t bytes_transferred) {
    if (!error) {
        read_buffer.commit(14);
        send(read_endpoint, read_buffer);
    }
    receive();
}

void udp_server2::send(const boost::asio::ip::udp::endpoint& endpoint, const boost::asio::streambuf& data) {
    socket.async_send_to(read_buffer.data(), endpoint, boost::bind(&udp_server2::handle_send, this, _1, _2));
}

void udp_server2::handle_send(const boost::system::error_code& error, std::size_t bytes_transferred) {
    if (!error) {
        read_buffer.consume(14);
    }
}

该asio服务器的性能是否可以显着提高,还是必须切换到另一个库?

经过进一步调查,我尝试在同一台计算机上(通过localhost)运行客户端和服务器。

我的响应时间为0.2毫秒。 因此,我得出的结论是,由于网络延迟而导致的性能不佳实际上是存在的 在两个测试环境中,都使用fritzbox作为路由器,因此这可能是瓶颈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM