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

戰(zhàn)魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

最近為服務器添加XMLSocket與Flash進行通信, 這種協(xié)議其實是一種以\0結尾的字符串協(xié)議, 為了讓asio兼容此協(xié)議, 我從文檔找到了async_read_until異步讀取系列, 這個函數(shù)的原理時, 給定一個streambuf, 和一個分隔符, asio碰到分隔符時返回, 你可以從streambuf中讀取需要的數(shù)據(jù). 看似很簡單, 我很快寫好一個demo與Flash進行通信, 結果發(fā)現(xiàn)在一個echo邏輯速度很快時, 服務器居然亂包了, 網上查了下, 官方原文是這樣的:

”After a successful async_read_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async_read_until operation to examine.”

意思是, streambuf中并不一定是到分隔符前的所有數(shù)據(jù), 多余的數(shù)據(jù)可能一樣會在streambuf中. 也就是說, 還需要自己再次處理一遍數(shù)據(jù)...

動手唄, async_read_until看似就是一個廢柴, 底層已經費了很多CPU在逐字符與分隔符的匹配上, 拋上來的數(shù)據(jù)居然還是半成品.

代碼如下, 測試通過, 但是實在很費解為啥非要再做一次..

          boost::asio::streambuf* SB = SBP.get();

            // 訪問緩沖
            const char* Buffs = boost::asio::buffer_cast<const char*>( SB->data() );

            uint32 DataSize = 0;
            for ( uint32 i = 0; i < SB->size(); ++i )
            {
                const char DChar = Buffs[i];

                // 這里需要自己判斷字符串內容, read_until的文檔里這么說的
                if ( DChar == '\0' )
                {
                    DataSize = i;
                    break;
                }
            }

            if ( DataSize > 0 )
            {
                // 取成字符串
                std::string FullText( Buffs, DataSize );
                
                // 消費
                SB->consume( DataSize );                

                mWorkService->post(
                    boost::bind(&AsioSession::NotifyReadString,
                    shared_from_this(),
                    FullText )
                    );

            }
  另外, 為了保證輸入性安全, 可以在streambuf構造時加一個最大一個讀取量, 超過此量會返回報錯, 避免了緩沖區(qū)被撐爆的危險
posted on 2012-12-03 15:12 戰(zhàn)魂小筑 閱讀(11691) 評論(5)  編輯 收藏 引用 所屬分類: 網絡 服務器技術C++/ 編程語言

評論

# re: 惱人的boost::asio::async_read_until 2012-12-03 19:24 FireEmissary
我試著運行了asio自帶的http例子,有調用async_read_until直到獨到"\r\n\r\n"的,結果你懂的  回復  更多評論
  

# re: 惱人的boost::asio::async_read_until 2012-12-03 19:49 buy term papers
Nice effort, very informative, this will help me to complete my task.  回復  更多評論
  

# re: 惱人的boost::asio::async_read_until[未登錄] 2012-12-05 00:06 Oliver
boost::asio::async_read_until(socket_,
stream_buffer_,
tail_regex_,
strand_.wrap(
boost::bind(&TCPClient::ReadHandler, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
async_read_until可以給出滿足要求的數(shù)據(jù)長度,可傳給讀取函數(shù),從buffer將指定長度的數(shù)據(jù)讀取就可以了。
這樣可以處理數(shù)據(jù)粘包。  回復  更多評論
  

# re: 惱人的boost::asio::async_read_until 2012-12-05 09:59 戰(zhàn)魂小筑
@Oliver
正則表達式很High哦, 本來async_read_until就已經很費了
不過對于文本協(xié)議, 這也是一個好方法  回復  更多評論
  

# re: 惱人的boost::asio::async_read_until 2013-04-13 23:48 Adrian
人家是API嘛,又不是引擎- -!  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            黄色一区二区三区| 久久这里有精品视频| 欧美性一区二区| 欧美精品久久久久久久| 女人色偷偷aa久久天堂| 美女视频网站黄色亚洲| 欧美精品啪啪| 国产精品久久国产精品99gif| 国产精品九九| 国产日韩欧美综合| 一区二区视频免费在线观看| 亚洲国产精品成人va在线观看| 亚洲精品欧美极品| 亚洲欧美国产毛片在线| 久久久99爱| 亚洲国产欧美不卡在线观看| 亚洲免费av电影| 午夜精品久久久99热福利| 久久激情一区| 欧美日韩激情小视频| 国产日韩在线看片| 亚洲精品在线免费| 欧美在线一区二区三区| 亚洲国产一二三| 亚洲自拍高清| 欧美肥婆在线| 国产综合久久久久久| 夜夜嗨网站十八久久| 欧美专区日韩视频| 亚洲三级视频| 久久精品人人做人人综合| 欧美日韩视频| 亚洲人午夜精品免费| 欧美在线综合| 一区二区三区不卡视频在线观看 | 久久成人精品一区二区三区| 麻豆精品视频在线观看| 国产精品福利在线观看网址| 亚洲成人在线视频网站| 午夜伦理片一区| 亚洲国产婷婷香蕉久久久久久| 久久精品亚洲一区二区| 狠狠色2019综合网| 国产精品99久久久久久有的能看 | 蜜桃久久精品一区二区| 在线亚洲精品福利网址导航| 老司机午夜精品视频在线观看| 国产精品久久久久一区| aa国产精品| 欧美.com| 久久久久九九视频| 国产亚洲第一区| 欧美一区2区视频在线观看| 欧美国产专区| 久久综合狠狠综合久久综青草| 国产一级揄自揄精品视频| 亚洲视频专区在线| 日韩视频第一页| 欧美国产第二页| 亚洲国产成人在线播放| 美女尤物久久精品| 久久精品国产一区二区电影 | 国产亚洲欧美激情| 欧美一区二区高清| 亚洲天堂网站在线观看视频| 欧美日韩亚洲在线| 亚洲午夜激情网页| 一区二区三区国产| 欧美天堂亚洲电影院在线观看 | 99精品99久久久久久宅男| 欧美高清影院| 欧美ab在线视频| 亚洲日韩欧美视频一区| 亚洲第一网站免费视频| 欧美成人影音| 宅男精品视频| 亚洲你懂的在线视频| 国产精品亚洲综合| 久久久久国产成人精品亚洲午夜| 久久久久高清| 亚洲区国产区| 国产精品yjizz| 欧美专区日韩专区| 久久影视精品| 日韩亚洲欧美中文三级| 日韩视频免费在线观看| 欧美性事在线| 久久久久久久网| 免费91麻豆精品国产自产在线观看| 亚洲国内欧美| 国产欧美日韩在线观看| 久久成人综合网| 久久夜色撩人精品| 一区二区欧美日韩视频| 欧美一级黄色网| 亚洲精品久久久久中文字幕欢迎你| 99精品黄色片免费大全| 亚洲精品一区二区三区99| 欧美三级在线播放| 欧美在线看片a免费观看| 久久久水蜜桃| 亚洲网站在线观看| 欧美永久精品| 亚洲精品小视频在线观看| 一区二区三区四区在线| 国内揄拍国内精品久久| 亚洲精品裸体| 狠狠色综合日日| 一本不卡影院| 国产综合欧美| 亚洲午夜黄色| 91久久亚洲| 午夜精品999| 亚洲天天影视| 猫咪成人在线观看| 欧美专区在线播放| 欧美性生交xxxxx久久久| 欧美aⅴ99久久黑人专区| 国产精品久久久久影院色老大| 亚洲成人资源| 精品成人在线| 亚洲欧美综合精品久久成人| 99re视频这里只有精品| 久久综合九色欧美综合狠狠| 欧美在线|欧美| 国产精品国产三级国产普通话蜜臀| 欧美激情一区在线观看| 黑丝一区二区三区| 欧美一区二区三区日韩视频| 亚洲一区二区三区视频播放| 欧美精品免费看| 91久久精品国产91久久性色| 在线观看一区| 久久精品中文字幕免费mv| 欧美在线免费看| 国产精品无人区| 亚洲夜晚福利在线观看| 亚洲一区二区三| 欧美日韩国产精品一区| 亚洲国产精品精华液网站| 亚洲大胆在线| 久久午夜精品一区二区| 老鸭窝毛片一区二区三区| 在线日韩av片| 乱码第一页成人| 欧美激情一区二区三区全黄| 亚洲欧洲精品一区二区三区不卡 | 久久视频一区| 国产又爽又黄的激情精品视频| 午夜一区在线| 久久亚洲精品伦理| 在线免费不卡视频| 亚洲视频中文| 欧美视频免费看| 亚洲视频电影图片偷拍一区| 午夜精品福利在线观看| 国产欧美日韩精品在线| 欧美与欧洲交xxxx免费观看| 亚洲美女精品成人在线视频| 一本一道久久综合狠狠老精东影业| 一区二区三区你懂的| 国产精品国产福利国产秒拍| 亚洲永久免费av| 巨乳诱惑日韩免费av| 亚洲福利视频网站| 欧美精品www| 在线视频欧美日韩| 久久精品亚洲| 亚洲国产精品一区制服丝袜| 欧美精品aa| 亚洲摸下面视频| 欧美高清hd18日本| 午夜免费日韩视频| 伊人久久综合97精品| 欧美高清视频免费观看| 一区二区欧美精品| 久久精品视频免费播放| 最新国产成人av网站网址麻豆| 欧美日韩午夜精品| 亚久久调教视频| 亚洲高清成人| 欧美一区在线看| 亚洲毛片一区| 国产欧美日韩91| 欧美成熟视频| 午夜精品电影| 亚洲精品免费看| 久久午夜av| 亚洲视频一区二区在线观看 | 国产精品你懂的在线| 久久久99免费视频| 亚洲狼人精品一区二区三区| 久久成人资源| 一区二区日韩精品| 有码中文亚洲精品| 国产精品久久久久久久久久直播| 老司机67194精品线观看| 亚洲视频图片小说| 91久久线看在观草草青青| 久久伊伊香蕉|