什么是最适合用于游戏服务器的boost :: asio读/写方法?

时间:2011-05-22 01:10:33

标签: c++ boost boost-asio

我正在使用boost :: asio来建立套接字网络。该库有许多不同的发送和接收数据的方法,每种方法执行类似的任务,但略有不同。

为了发送数据,boost提供以下功能:

boost::asio::basic_stream_socket::async_send()

boost::asio::basic_stream_socket::async_write_some()

boost::asio::basic_stream_socket::async_write()

为了接收数据,boost提供了以下功能:

boost::asio::basic_stream_socket::async_receive()

boost::asio::basic_stream_socket::async_read_some()

boost::asio::basic_stream_socket::async_read()

其中哪一个最适合用于游戏服务器?为什么?

2 个答案:

答案 0 :(得分:2)

async_read()async_write()个免费函数是组合操作。它们是通过对流的async_read_some()async_write_some()方法进行零次或多次调用来实现的。

在异步操作完成之前,成员函数可能不会传输或接收所有数据。如果你想要这种行为,你应该使用免费功能。

答案 1 :(得分:1)

问题已经得到解答,但值得一提的是async_write_someasync_send的功能完全相同,命名只是为了保持一致,因为“send”适用于套接字并且“写”适用于溪流。

需要注意的另一个要点是,async_write自由函数是Chris Kohlhoff所说的“组合操作”,这意味着即使它立即返回,调用另一个async_write也是不安全的。直到相关的处理程序被调用 - 如果没有预料到这可能会导致各种问题。 async_write_some函数的级别较低,不会受此影响。

进一步阅读:http://blog.think-async.com/2009/08/composed-operations-coroutines-and-code.html

相关问题