【问题标题】:Boost Asio problems, Server-Client, Slow on a real network?Boost Asio 问题,服务器-客户端,在真实网络上速度慢?
【发布时间】:2010-09-07 12:15:31
【问题描述】:

我使用 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,没有用。我还能做什么?

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    如果这是您的发送/接收代码的总和,那么在

    【讨论】:

    • 你会如何建议这样做?我应该从哪里开始,这很难做到吗?
    • 是的,这很难做到,但是一旦你完成了,你会很高兴你学会了如何去做。使用 Google 跟踪一些示例代码,理解它(最好在调试器中运行它),然后相应地重新设计您的设计。
    【解决方案2】:

    准备要离线发送的数据,然后使用 async_write 写入数据。使用 async_read 从 socked 中读取数据。这些是非阻塞操作,因此可能会对服务器端产生重大影响。

    【讨论】:

      【解决方案3】:

      可能无法修复它,但值得一试——在消息发送后更改客户端以刷新流:

        (*stream) << data << delimiter << std::flush;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-07
        • 2021-04-01
        • 2020-01-22
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        • 1970-01-01
        相关资源
        最近更新 更多