Boost.Asio的使用技巧 (中文 总结的非常好)
http://blog.jqian.net/post/boost-asio.html?spm=a2c4e.11153940.blogcont243127.9.d8fc2f941Abbd7#toc_0
boost.Asio的使用实践总结(英文 强烈推荐):
https://www.gamedev.net/blogs/entry/2249317-a-guide-to-getting-started-with-boostasio/
Boost.Asio函数库手册中文版
http://zh.highscore.de/cpp/boost/?spm=a2c4e.11153940.blogcont243127.33.d8fc2f941Abbd7
Boost.Asio官方example学习:
https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/examples/cpp11_examples.html
1. Allocation
异步调用时asio会分配一块内存来拷贝和保存handler,一般的socket程序都会有很多次异步过程,例如循环调用async_read/write,这将导致频繁的分配和释放保存handler的内存,从而降低效率。为了避免这种情况的发生,可以自定义这个分配过程,让asio内部代码在分配并拷贝handler时使用这些内存。
https://www.cnblogs.com/my_life/articles/5401767.html
https://www.cnblogs.com/walker-lc/articles/3573743.html
2. Buffers
异步调用的时候,比如调用boost::asio::async_write的时候,函数立即返回,而真正的写入后面才发生,这就要求所发送的数据不要被立即销毁,而是等到写入完成后才销毁。
对比一下这个连接里面没有使用自定义buffer的例子https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html, 可以看到在class tcp_connection中有一个成员变量std::string message_,用来存储要发送的消息。
而在使用Buffer的例子中,因为使用了自定义的shared_const_buffer类,在 class session中就不需要再定义个存储消息的成员变量了。