【问题标题】:Boost Asio UDP Daytime Server Async receiveBoost Asio UDP 日间服务器异步接收
【发布时间】:2013-09-24 18:00:15
【问题描述】:

我最近一直在学习 boost asio,尤其是 UDP。我熟悉基础知识,但对 UDP 如何处理传入消息有疑问。在本教程中(请参阅此处的源代码:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/tutorial/tutdaytime6/src.html),UDP 服务器的操作类似于(非常伪代码):

startReceive(){
    async_receive(boost::bind(handler),...other params);
}

handler(){
    doStuffToDataReceived();
    startReceive(); //start the receiving process over again to allow it to receive more data
}

我的问题是,如果数据在“doStuffToDataReceived()”中的时间到达服务器,在它再次 startReceives 之前,该数据会丢失,还是坐在那里等待 startReceive 再次发生然后立即被找回?

谢谢!

【问题讨论】:

    标签: c++ sockets boost udp boost-asio


    【解决方案1】:

    UDP 栈有缓冲区,所以上例中的数据不会丢失。

    但是请注意,在各种情况下都允许 UDP 丢弃数据包。因此,随着 UDP 服务器吞吐量的增长,doStuffToDataReceived 的时间安排可能变得更加关键。

    【讨论】:

    • 您能否更具体地说明在哪些情况下允许丢弃数据包?
    • @jekelija 例如,当应用程序无法尽快处理数据包时。或者当网络无法满足吞吐量需求时。一般来说:bit.ly/1b9XaRp
    • @jekelija:由于协议被指定为不可靠,我不相信规范提供了具体情况。该指南建议使用 UDP 的应用程序应该能够处理丢失、重复或无序的数据报。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2012-08-27
    • 2018-06-29
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多