青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-380  評(píng)論-37  文章-0  trackbacks-0
ASIO的異步方式
異步方式 和同步方式不同,從來(lái)不花時(shí)間去等那些龜速的IO操作,只是向系統(tǒng)說(shuō)一聲要做什么,然后就可以做其它事去了。
如果系統(tǒng)完成了操作, 系統(tǒng)就會(huì)通過(guò)我之前給它的回調(diào)對(duì)象來(lái)通知我。
在ASIO庫(kù)中,異步方式的函數(shù)或方法名稱前面都有“async_” 前綴,函數(shù)參數(shù)里會(huì)要求放一個(gè)回調(diào)函數(shù)(或仿函數(shù))。
異步操作執(zhí)行 后不管有沒(méi)有完成都會(huì)立即返回,這時(shí)可以做一些其它事,直到回調(diào)函數(shù)(或仿函數(shù))被調(diào)用,說(shuō)明異步操作已經(jīng)完成。
在ASIO中很多回調(diào)函數(shù)都只接受一個(gè)boost::system::error_code參數(shù),在實(shí)際使用時(shí)肯定是不夠的,所以一般 使用仿函數(shù)攜帶一堆相關(guān)數(shù)據(jù)作為回調(diào),或者使用boost::bind來(lái)綁定一堆數(shù)據(jù)。
另外要注意的是,只有io_service類的run()方法運(yùn)行之后回調(diào)對(duì)象才會(huì)被調(diào)用,否則即使系統(tǒng)已經(jīng)完成了異步操作也不會(huì)有任 務(wù)動(dòng)作。
好了,就介紹到這里,下面是我?guī)?lái)的異步方式TCP Helloworld服務(wù)器端:
1.#include
2.#include
3.#include
4.#include
5.#include
6.
7.using namespace boost::asio;
8.using boost::system::error_code;
9.using ip::tcp;
10.
11.struct CHelloWorld_Service{
12. CHelloWorld_Service(io_service &iosev)
13. :m_iosev(iosev),m_acceptor(iosev, tcp::endpoint(tcp::v4(), 1000))
14. {
15. }
16.
17. void start()
18. {
19. // 開(kāi)始等待連接(非阻塞)
20. boost::shared_ptr psocket(new tcp::socket(m_iosev));
21. // 觸發(fā)的事件只有error_code參數(shù),所以用boost::bind把socket綁定進(jìn)去
22. m_acceptor.async_accept(*psocket,
23. boost::bind(&CHelloWorld_Service::accept_handler, this, psocket, _1)
24. );
25. }
26.
?27. // 有客戶端連接時(shí)accept_handler觸發(fā)
28. void accept_handler(boost::shared_ptr psocket, error_code ec)
29. {
30. if(ec) return;
31. // 繼續(xù)等待連接
32. start();
?33. // 顯示遠(yuǎn)程IP
?34. std::cout << psocket->remote_endpoint().address() << std::endl;
35. // 發(fā)送信息(非阻塞)
36. boost::shared_ptr pstr(new std::string("hello async world!"));
37. psocket->async_write_some(buffer(*pstr),
38. boost::bind(&CHelloWorld_Service::write_handler, this, pstr, _1, _2)
39. );
?40. }
?41.
42. // 異步寫(xiě)操作完成后write_handler觸發(fā)
43. void write_handler(boost::shared_ptr pstr,
44. error_code ec, size_t bytes_transferred)
45. {
46. if(ec)
47. std::cout<< "發(fā)送失敗!" << std::endl;
48. else
49. std::cout<< *pstr << " 已發(fā)送" << std::endl;
50. }
51.
52.private:
53. io_service &m_iosev;
54. ip::tcp::acceptor m_acceptor;
55.};
56.
57.int main(int argc, char* argv[])
58.{
59. io_service iosev;
60. CHelloWorld_Service sev(iosev);
?61. // 開(kāi)始等待連接
62. sev.start();
63. iosev.run();
64.
65. return 0;
66.}
在這個(gè)例子中,首先調(diào)用sev.start()開(kāi) 始接受客戶端連接。
由于async_accept調(diào) 用后立即返回,start()方 法 也就馬上完成了。
sev.start()在 瞬間返回后iosev.run()開(kāi) 始執(zhí)行,iosev.run()方法是一個(gè)循環(huán),負(fù)責(zé)分發(fā)異步回調(diào)事件,
只 有所有異步操作全部完成才會(huì)返回。
這里有個(gè)問(wèn)題,就是要保證start()方法中m_acceptor.async_accept操 作所用的tcp::socket對(duì)象在整個(gè)異步操作期間保持有效
(不 然系統(tǒng)底層異步操作了一半突然發(fā)現(xiàn)tcp::socket沒(méi)了,不是拿人家開(kāi)涮嘛-_-!!!),
而且客戶端連接進(jìn)來(lái)后這個(gè)tcp::socket對(duì)象還 有用呢。
這里的解決辦法是使用一個(gè)帶計(jì)數(shù)的智能指針boost::shared_ptr,并把這個(gè)指針作為參數(shù)綁定到回調(diào)函數(shù)上。
一旦有客戶連接,我們?cè)趕tart()里給的回調(diào)函數(shù)accept_handler就會(huì)被 調(diào)用,
首先調(diào)用start()繼續(xù)異步等待其 它客戶端的連接,然后使用綁定進(jìn)來(lái)的tcp::socket對(duì)象與當(dāng)前客戶端通信。
發(fā)送數(shù)據(jù)也使用了異步方式(async_write_some), 同樣要保證在整個(gè)異步發(fā)送期間緩沖區(qū)的有效性,
所以也用boost::bind綁定了boost::shared_ptr
對(duì)于客戶端也一樣,在connect和read_some方法前加一個(gè)async_前綴,然后加入回調(diào)即可,大家自己練習(xí)寫(xiě)一寫(xiě)。
posted on 2009-08-19 00:36 小王 閱讀(1024) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)通訊
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品视屏| 艳女tv在线观看国产一区| 亚洲激情视频网| 国产午夜亚洲精品羞羞网站| 国产精品永久在线| 狠狠综合久久av一区二区小说| 国产亚洲a∨片在线观看| 精品9999| 亚洲美洲欧洲综合国产一区| 在线亚洲电影| 欧美一二三区精品| 免费中文字幕日韩欧美| 亚洲国产国产亚洲一二三| 欧美成人一区二区三区片免费| 亚洲国产经典视频| 亚洲小说欧美另类社区| 欧美在线综合视频| 久久免费高清视频| 欧美日韩岛国| 国产精品普通话对白| 韩国久久久久| 一本大道久久a久久精二百| 99国产一区二区三精品乱码| 午夜激情亚洲| 牛牛国产精品| 亚洲图片欧美一区| 美女在线一区二区| 国产精品美女诱惑| 亚洲人成人99网站| 亚洲欧美综合精品久久成人| 欧美sm视频| 午夜在线视频一区二区区别| 欧美女同视频| 亚洲国产精品久久久| 久久精品一区二区| 亚洲国产专区校园欧美| 久久国产精品黑丝| 国产精品久久久久久久午夜 | 国产日韩精品在线| 亚洲美女啪啪| 久久视频一区二区| 在线亚洲精品| 欧美激情欧美狂野欧美精品| 精品成人一区二区三区| 亚洲欧洲另类| 欧美一区二区在线免费观看 | 亚洲麻豆一区| 久久精品国产77777蜜臀| 亚洲精品日日夜夜| 美女精品在线观看| 精品电影在线观看| 久久精品国产清高在天天线| 一本一本a久久| 欧美日韩国内自拍| 日韩午夜一区| 亚洲国产激情| 免费久久精品视频| 在线观看日韩国产| 免费高清在线一区| 中国日韩欧美久久久久久久久| 久久久噜噜噜久久中文字幕色伊伊 | 一区二区三区日韩欧美| 亚洲第一精品影视| 蜜臀久久99精品久久久久久9 | 亚洲国产天堂久久综合网| 久久精品国产一区二区三| 亚洲欧美电影在线观看| 国产精品夜夜夜| 亚洲欧美一级二级三级| 99精品国产一区二区青青牛奶| 久久久福利视频| 国产欧美精品一区| 亚洲主播在线播放| 99re6热只有精品免费观看| 久久这里有精品视频| 韩国精品久久久999| 久久狠狠久久综合桃花| 亚洲欧美激情精品一区二区| 欧美三区美女| 在线一区二区视频| 亚洲精品日本| 欧美日韩一本到| 一区二区三区高清不卡| 最新精品在线| 欧美黄色网络| 亚洲品质自拍| 夜夜躁日日躁狠狠久久88av| 国产精品久久久一区麻豆最新章节 | 性伦欧美刺激片在线观看| 久久国产视频网| 老鸭窝毛片一区二区三区| 国语自产精品视频在线看| 欧美三区美女| 在线精品国产欧美| 亚洲精品1区2区| 久久精品午夜| 伊人久久亚洲影院| 欧美高清影院| 国产精品福利网| 久久躁狠狠躁夜夜爽| 欧美ed2k| 亚洲尤物影院| 久久精品国产视频| 日韩午夜在线观看视频| 亚洲一级黄色片| 影音先锋日韩资源| 在线视频日本亚洲性| 影音先锋久久久| 亚洲午夜电影网| 亚洲欧洲日本一区二区三区| 亚洲午夜久久久| 91久久黄色| 久久成人久久爱| 亚洲欧美日本视频在线观看| 久久精品一级爱片| 亚欧成人在线| 欧美日韩国产精品| 欧美福利精品| 国产视频不卡| 一区二区三区高清在线观看| 亚洲国产成人精品久久久国产成人一区| 99一区二区| 亚洲人成网站色ww在线| 欧美在线啊v| 午夜精品久久| 欧美网站在线| 亚洲久久在线| 亚洲人成人99网站| 久久乐国产精品| 久久精品理论片| 国产精品素人视频| 日韩午夜在线电影| 日韩午夜在线播放| 欧美岛国激情| 亚洲国产成人久久综合| 在线 亚洲欧美在线综合一区| 香蕉免费一区二区三区在线观看| 在线亚洲自拍| 欧美色播在线播放| 亚洲九九精品| 亚洲午夜精品久久| 欧美日本簧片| 日韩亚洲精品在线| 亚洲午夜久久久久久久久电影院 | 欧美成人精品在线观看| 久久综合99re88久久爱| 国内精品久久久| 性亚洲最疯狂xxxx高清| 久久www成人_看片免费不卡| 亚洲日本精品国产第一区| 亚洲国产三级在线| 狠狠色丁香久久婷婷综合丁香| 香蕉久久夜色精品国产| 久久青草福利网站| 亚洲成色999久久网站| 欧美69wwwcom| 亚洲精品资源美女情侣酒店| 亚洲一区三区视频在线观看| 国产精品国产一区二区| 性欧美xxxx视频在线观看| 久久久高清一区二区三区| 在线观看欧美日韩| 欧美理论电影网| 亚洲综合欧美| 免费观看一区| 99视频热这里只有精品免费| 欧美日韩免费区域视频在线观看| 一二三四社区欧美黄| 久久成人国产| 亚洲福利视频一区二区| 欧美日韩久久久久久| 亚洲欧美另类中文字幕| 噜噜噜在线观看免费视频日韩| 亚洲日本中文字幕| 国产精品亚洲综合色区韩国| 久久人人爽爽爽人久久久| 亚洲精品影院在线观看| 久久精品一二三| 一区二区黄色| 激情婷婷久久| 欧美私人网站| 久久亚洲国产成人| 一区二区三区视频在线播放| 免费在线视频一区| 欧美一区免费视频| 夜夜嗨av色综合久久久综合网| 国产欧美精品va在线观看| 欧美激情1区2区| 欧美在线首页| 一本色道88久久加勒比精品| 蜜桃av一区二区三区| 亚洲影音一区| 亚洲日本黄色| 精品不卡一区| 国产精品亚发布| 欧美三级午夜理伦三级中视频| 卡一卡二国产精品| 欧美在线亚洲一区| 亚洲主播在线播放| 99精品久久久|