c++ - Boost Asio 问题,服务器-客户端,真实网络上速度慢?

标签 c++ boost boost-asio

我使用 Boost Asio 创建了一个客户端-服务器架构。

一切正常,我可以发送和接收消息等,所以没有关于正确性的问题。然而,当我在真实网络中实现它时,它突然变得非常慢。当我在同一台计算机上运行服务器和客户端时,它运行得非常快,但是当我在两台不同的计算机上运行它时,它变得非常慢,我必须为每条消息等待一秒钟。这些消息很小,最多 50、60 个字符。不过,它们已正确发送。

代码:

stream = new tcp::iostream(serverIp, portNum); // Clientside

对于发送和接收,我使用:

(*stream) << data << delimiter;
std::getline(*stream, response, '#');

服务器使用相同的发送和接收,以及一些设置连接的设置代码:

boost::asio::io_service io_service;

tcp::endpoint endpoint(tcp::v4(), portNum); 
tcp::acceptor acceptor(io_service, endpoint);

for (;;)
{
    tcp::iostream *stream = new tcp::iostream();
    acceptor.accept(*(stream->rdbuf()));

    // Do stuff with the stream
}

再次,它起作用了,只是在真实网络上突然变得非常缓慢。我做错了什么吗?我尝试更改 portNum,但没有用。还有什么我可以做的吗?

最佳答案

如果这是您的发送/接收代码的总和,那么在 << 和 getline 调用完成之前,等待发送方和接收方同步似乎会花费很多时间。当引入真实的网络连接时,这种效果将被大大放大。它在本地看起来可能非常快,但在假设之前先在本地测量字节吞吐量。通常,您不会像这样紧密耦合发送和接收处理 - 您基本上是采用异步 I/O 库并强制其同步。尝试重新设计以实际使用异步 I/O,并将发送和接收处理相互分离(或者至少不要像这样使用同步高级 I/O 调用来访问套接字来序列化它们)并且网络性能应该会 boost .

关于c++ - Boost Asio 问题,服务器-客户端,真实网络上速度慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3658562/

相关文章:

c++ - 奇怪的调用栈,会不会是asio使用openssl的问题?

c++ - 同时读取 100 个 telnet 连接 c++

c++ - 将变量形式 make 移植到 Cmake

c++ - async_read_until 在分隔符读取之前完成

c++ - 我应该看到 std::bind 和 boost::bind 之间的显着差异吗?

c++ - 使用 Boost Coroutines 实现多任务调度器和执行器

c++ - 新建一个打开的窗口并插入图片

c++ - 如何为特定目录或文件启用特定的 gcc 警告?

c++ - 在库中定义常量变量 pi

c++ - Boost asio 用于多个异步网络客户端操作