我写了一个提升asio async 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服务器的性能能否得到显着改善,还是我必须切换到另一个库?
答案 0 :(得分:0)
经过进一步调查后,我尝试在同一台计算机上运行客户端和服务器(通过localhost)。
我的响应时间为0.2ms。所以我得出结论,由于网络延迟而导致性能不佳。在两个测试环境中都使用了fritzbox作为路由器,因此这可能是瓶颈。