簡體   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