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

隨筆-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>
            午夜精品久久久久久99热| 欧美大片在线看| 国产精品制服诱惑| 亚洲欧美中文日韩在线| 中日韩美女免费视频网址在线观看| 欧美日韩播放| 亚洲欧美日韩另类| 狠狠干综合网| 亚洲欧美日韩在线| 午夜老司机精品| 国语自产精品视频在线看一大j8| 久久久99国产精品免费| 久久精品午夜| 亚洲精选视频免费看| 99这里只有精品| 国产日韩精品视频一区| 久久字幕精品一区| 欧美精品黄色| 欧美亚洲视频一区二区| 久久成人av少妇免费| 亚洲人人精品| 亚洲欧美高清| 亚洲黄色av| 亚洲性图久久| 亚洲精品久久久久久久久久久| 亚洲精品乱码久久久久久日本蜜臀 | 欧美男人的天堂| 久久av红桃一区二区小说| 老司机午夜免费精品视频| 一本色道久久综合亚洲精品小说| 亚洲欧美电影院| 99v久久综合狠狠综合久久| 午夜欧美大尺度福利影院在线看| 亚洲国产精品成人一区二区| 中日韩美女免费视频网站在线观看| 激情亚洲网站| 亚洲一区二区免费| 亚洲精品一区二区三| 久久丁香综合五月国产三级网站| 夜夜精品视频| 久久一区免费| 久久aⅴ国产欧美74aaa| 欧美日韩亚洲一区二区三区| 免费一区视频| 国产情人节一区| 亚洲精品中文字幕在线| 亚洲高清三级视频| 香蕉久久夜色| 亚洲欧美在线网| 欧美激情视频网站| 蜜臀91精品一区二区三区| 国产精品久久久久久久久免费樱桃| 亚洲国产成人高清精品| 精品动漫av| 亚洲欧美三级在线| 亚洲男人的天堂在线aⅴ视频| 欧美激情综合色| 欧美aⅴ99久久黑人专区| 国产亚洲一区精品| 午夜久久电影网| 亚洲欧美日韩一区二区在线 | 欧美三级午夜理伦三级中文幕| 免费不卡欧美自拍视频| 欧美美女bbbb| 在线观看成人av| 欧美在线观看视频| 久久精品人人爽| 国产日本欧洲亚洲| 午夜久久久久久| 久久久精品tv| 激情欧美日韩| 久久噜噜亚洲综合| 欧美成ee人免费视频| 亚洲高清在线| 欧美第十八页| 亚洲精品午夜精品| 亚洲一区二区三区精品在线观看| 欧美日韩国产大片| 亚洲最快最全在线视频| 午夜视频在线观看一区二区| 国产精品一级二级三级| 欧美亚洲三区| 免费亚洲一区二区| 亚洲国产日韩一区| 欧美日韩的一区二区| 一本久久精品一区二区| 欧美一区二区日韩一区二区| 国精品一区二区| 久久综合色8888| 亚洲精品综合| 午夜在线播放视频欧美| 国产亚洲午夜高清国产拍精品| 久久精品成人一区二区三区蜜臀| 能在线观看的日韩av| 一区二区三区高清视频在线观看| 国产精品成人v| 欧美在线日韩在线| 亚洲欧洲视频| 久久av一区二区三区| 亚洲欧洲精品成人久久奇米网| 欧美日韩免费一区二区三区视频| 性欧美精品高清| 亚洲国产美国国产综合一区二区| 亚洲深夜福利在线| 好男人免费精品视频| 欧美成人高清视频| 午夜精品成人在线| 亚洲国产日韩在线一区模特| 午夜精品久久久久久久久久久久 | 欧美性猛片xxxx免费看久爱| 久久成人资源| 一本到高清视频免费精品| 久久免费高清视频| 亚洲一区二区少妇| 亚洲高清不卡av| 国产精品自在在线| 欧美日韩国产一级| 噜噜噜躁狠狠躁狠狠精品视频| 一本色道久久综合一区| 女生裸体视频一区二区三区| 新67194成人永久网站| 亚洲精品色婷婷福利天堂| 国产精品自拍在线| 欧美天天在线| 欧美理论电影在线播放| 久久精品在线视频| 亚洲中字黄色| 中日韩美女免费视频网址在线观看| 亚洲福利视频在线| 久久男人资源视频| 久久国产欧美| 欧美中文在线视频| 亚洲午夜国产成人av电影男同| 性色一区二区三区| 久久激情中文| 亚洲精品乱码久久久久久日本蜜臀 | 欧美成人免费播放| 久久人人爽国产| 欧美在线免费观看亚洲| 亚洲欧美日韩一区二区在线| 一区二区毛片| 亚洲美女精品久久| 亚洲精华国产欧美| 亚洲国产精品久久久久| 欧美fxxxxxx另类| 蜜桃久久精品乱码一区二区| 久久综合九色欧美综合狠狠| 久久久亚洲成人| 久久久噜噜噜久久久| 久久精品国产欧美激情| 欧美与欧洲交xxxx免费观看| 久久精品91| 久久久久久噜噜噜久久久精品| 久久精品亚洲精品国产欧美kt∨| 久久精品亚洲一区| 玖玖玖国产精品| 欧美激情第3页| 亚洲精品久久久久久下一站| 亚洲日本成人在线观看| 亚洲免费观看视频| 亚洲视频在线一区观看| 性欧美video另类hd性玩具| 欧美在线观看视频一区二区三区| 欧美在线观看你懂的| 噜噜噜在线观看免费视频日韩| 欧美成人激情在线| 欧美午夜理伦三级在线观看| 国产酒店精品激情| 亚洲国产精品va| 一区二区高清视频在线观看| 午夜精品久久久久影视 | 一区二区91| 亚洲一区3d动漫同人无遮挡| 午夜一区二区三区在线观看| 久久这里只有精品视频首页| 亚洲国产高潮在线观看| 亚洲乱码精品一二三四区日韩在线| 国产精品99久久久久久久久久久久 | 美女被久久久| 蜜臀99久久精品久久久久久软件| 亚洲婷婷综合色高清在线| 亚洲一区二区三区四区在线观看| 欧美一区二区三区在线视频 | 亚洲美女色禁图| 亚洲欧美日韩在线综合| 久久在线免费| 99精品99| 久久久久高清| 欧美日韩免费在线观看| 国产一区清纯| 亚洲无吗在线| 麻豆精品在线观看| 亚洲深夜福利网站| 欧美 日韩 国产 一区| 国产精品推荐精品| 最新中文字幕亚洲| 久久久久久网站| 亚洲制服少妇| 欧美日韩亚洲视频| 国产欧美日韩亚洲一区二区三区|