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

隨筆-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>
            久久久久久久久伊人| 国产精品久久久久久久电影| 亚洲国产欧美不卡在线观看| 欧美一级专区| 久久精品国产999大香线蕉| 久久国产精品99国产| 久久精品国产一区二区三区免费看| 欧美一区二区免费视频| 久久九九热re6这里有精品| 免费在线观看一区二区| 亚洲成色999久久网站| 亚洲在线电影| 欧美成人在线免费观看| 亚洲电影免费观看高清完整版在线| 亚洲大片在线| 一区二区三区www| 欧美一区二区三区在线免费观看| 久久激情一区| 欧美日韩美女| 国产一区在线看| 日韩一区二区免费看| 午夜日韩福利| 欧美激情在线观看| 亚洲香蕉伊综合在人在线视看| 久久久97精品| 欧美三级电影网| 国产一区二区三区在线观看精品| 亚洲日本电影| 久久久精品视频成人| 亚洲欧洲在线观看| 久久九九精品99国产精品| 欧美视频在线一区二区三区| 在线观看91精品国产麻豆| 亚洲欧美久久久| 亚洲欧洲日韩在线| 久久亚洲私人国产精品va媚药 | 欧美一级片一区| 免费观看在线综合色| 国产日本欧洲亚洲| 亚洲小说春色综合另类电影| 欧美成人蜜桃| 久久精品一二三区| 国产女优一区| 午夜精品久久久久久久99樱桃| 免费久久99精品国产| 亚洲综合首页| 国产精品第十页| 99精品国产99久久久久久福利| 久久一区二区三区av| 亚洲一区二区高清视频| 欧美人成免费网站| 亚洲精品网址在线观看| 欧美国产日韩精品| 久久久久久亚洲综合影院红桃 | 欧美手机在线视频| 亚洲精品在线免费观看视频| 免费视频久久| 久久久精品免费视频| 国产日韩欧美黄色| 欧美综合国产| 性娇小13――14欧美| 国产欧美日本一区视频| 欧美一区二区在线| 亚洲欧美视频一区| 国产午夜精品视频免费不卡69堂| 欧美亚洲在线视频| 性欧美1819sex性高清| 国产欧美日韩麻豆91| 亚洲欧美日韩第一区| 国产精品女主播| 亚洲欧美日韩直播| 西西裸体人体做爰大胆久久久| 国产精一区二区三区| 久久久久9999亚洲精品| 久久理论片午夜琪琪电影网| 在线观看欧美视频| 91久久精品日日躁夜夜躁国产| 欧美黄色日本| 亚洲一区二区三区精品动漫| 亚洲无玛一区| 黄色资源网久久资源365| 欧美大片在线看| 欧美日韩一区二区视频在线观看| 亚洲女性喷水在线观看一区| 欧美亚洲视频在线观看| 亚洲二区三区四区| 亚洲视频在线一区| 在线观看视频一区| 一区二区三区毛片| 影音先锋久久| 亚洲九九爱视频| 国产日韩高清一区二区三区在线| 久久尤物电影视频在线观看| 欧美大片va欧美在线播放| 亚洲自拍偷拍福利| 久久天天综合| 亚洲一级片在线观看| 久久精彩免费视频| 亚洲色图自拍| 欧美成人按摩| 久久精品人人做人人爽| 欧美区一区二| 麻豆国产va免费精品高清在线| 欧美日韩国产电影| 麻豆免费精品视频| 国产乱理伦片在线观看夜一区| 欧美成人一区二区在线| 国产精品萝li| 亚洲靠逼com| 亚洲国产日韩欧美在线动漫| 亚洲午夜av在线| 日韩视频一区二区三区在线播放 | 99re6热只有精品免费观看| 国产一区二区精品在线观看| 亚洲美女啪啪| 亚洲国产精品久久久| 亚洲视频在线观看| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲欧美激情一区| 欧美高清在线精品一区| 久久综合九色九九| 国产日韩专区| 亚洲视频在线看| 一区二区欧美在线观看| 免费黄网站欧美| 伊大人香蕉综合8在线视| 免费亚洲一区二区| 久久狠狠亚洲综合| 国产精品美女主播| 中国av一区| 夜夜嗨av一区二区三区中文字幕 | 在线欧美福利| 久久精品国产69国产精品亚洲 | 欧美福利视频在线| 亚洲第一主播视频| 亚洲精品日韩精品| 欧美电影免费观看高清| 亚洲国产精品日韩| 亚洲精品视频一区二区三区| 欧美不卡在线视频| 亚洲国产黄色片| 亚洲美女91| 欧美三级电影大全| 亚洲女性裸体视频| 久久精品国产亚洲aⅴ| 国产综合久久久久影院| 久久久久网站| 最新精品在线| 亚洲视频在线二区| 国产精品日韩电影| 欧美伊人久久| 亚洲电影在线看| 亚洲视频在线观看免费| 国产精品日本| 久久久青草婷婷精品综合日韩 | 欧美在线黄色| 国模 一区 二区 三区| 久久免费国产| 亚洲三级性片| 欧美一区二区免费视频| 1000部国产精品成人观看| 欧美国产亚洲视频| 亚洲欧美伊人| 欧美成人在线免费观看| 亚洲午夜免费福利视频| 国产一区二区三区黄视频| 嫩草影视亚洲| 亚洲女优在线| 亚洲高清自拍| 欧美中文字幕在线视频| 亚洲国产婷婷香蕉久久久久久99| 欧美日韩精品一区二区三区四区 | 欧美日韩另类丝袜其他| 亚洲在线国产日韩欧美| 免费欧美高清视频| 亚洲一级网站| 亚洲激情一区二区| 国产免费成人| 欧美日韩www| 久久久久久久综合狠狠综合| 国产精品成人免费精品自在线观看| 亚洲欧美激情视频| 在线观看成人网| 国产精品久久久久久亚洲毛片| 久久精品二区亚洲w码| 亚洲精品在线一区二区| 久久综合狠狠综合久久综青草| 一区二区三欧美| 亚洲精品1区2区| 国产在线欧美日韩| 国产精品久久久一区麻豆最新章节 | 亚洲欧美日韩精品| 亚洲人成人一区二区在线观看| 欧美一区二区视频97| 亚洲视频在线观看三级| 亚洲乱亚洲高清| 影音先锋成人资源站| 国产午夜精品久久久久久久| 国产精品高潮久久| 欧美精品一区二区三区蜜桃|