锘??xml version="1.0" encoding="utf-8" standalone="yes"?>宅男精品导航,久久精品一区二区三区中文字幕,欧美激情亚洲另类http://m.shnenglu.com/cxiaojia/category/19331.html鍘氬痙 鍗氬 姹傜湡 鑷沖杽 The bright moon and breezezh-cnSat, 13 Apr 2013 04:13:39 GMTSat, 13 Apr 2013 04:13:39 GMT60ACE鍓嶆憚鍣≒roactor鏈濂界殑璁茶В錛堣漿杞斤級http://m.shnenglu.com/cxiaojia/archive/2013/04/12/199385.htmlC灝忓姞C灝忓姞Fri, 12 Apr 2013 09:43:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2013/04/12/199385.htmlhttp://m.shnenglu.com/cxiaojia/comments/199385.htmlhttp://m.shnenglu.com/cxiaojia/archive/2013/04/12/199385.html#Feedback2http://m.shnenglu.com/cxiaojia/comments/commentRss/199385.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/199385.html杞嚜錛?a >http://blog.csdn.net/caisini_vc/article/details/4474910
鎶婅繖涓ゅぉ鍋歅roactor鐨勪竴浜涚粡楠屽拰蹇冨緱鍐欎竴涓嬶紝鍙兘浼氱粰涓浜涗漢甯姪銆?br />    Proactor鏄紓姝ユā寮忕殑緗戠粶澶勭悊鍣紝ACE涓彨鍋?#8220;鍓嶆憚鍣?#8221;銆?br />    鍏堣鍑犱釜姒傚康錛?br />    鍓嶆憚鍣紙Proactor錛夛紞寮傛鐨勪簨浠跺璺垎紱誨櫒銆佸鐞嗗櫒錛屾槸鏍稿績澶勭悊綾匯傚惎鍔ㄥ悗鐢?涓嚎紼嬬粍鎴愶紙浣犱笉闇瑕佸叧蹇冭繖涓変釜綰跨▼錛屾垜鍙槸璁╀綘鐭ラ亾涓涓嬫湁榪欏洖浜嬪瓨鍦級銆?br />    鎺ュ彈鍣紙Acceptor錛夛紞鐢ㄤ簬鏈嶅姟绔紝鐩戝惉鍦ㄤ竴涓鍙d笂錛屾帴鍙楃敤鎴風殑璇鋒眰銆?br />    榪炴帴鍣紙Connector錛夛紞鐢ㄤ簬瀹㈡埛绔紝鍘昏繛鎺ヨ繙紼嬬殑鐩戝惉銆傚綋鐒訛紝濡傛灉榪滅▼鏄疉CE鍐欑殑錛屽氨鏄疉cceptor銆?br />    寮傛妯″紡錛嶅嵆闈為樆濉炴ā寮忋傜綉緇滅殑浼犺緭閫熷害涓鑸潵璁蹭負10Mbps銆?00Mbps銆?000Mbps銆傛嬁鍗冨厗緗戞潵璇達紝瀹為檯鐨勪紶杈撻熷害涓?000Mbps/8澶ф涓?28KB宸﹀彸銆傛垜浠殑CPU涓鑸負P4 3.0GHZ錛屽鏋滄槸32浣嶇殑澶勭悊鍣紝涓縐掗挓澶ф鍙互澶勭悊6G鐨勫瓧鑺傦紝閭d箞錛?28KB鐨勭綉緇滈熷害鏄繙榪滃強涓嶄笂澶勭悊鍣ㄧ殑閫熷害鐨勩傜綉緇滃彂閫佹暟鎹槸涓浣嶄竴浣嶅彂閫佸嚭鍘葷殑錛屽鏋淐PU絳夊湪榪欓噷錛屽彂閫佸畬鎴愬嚱鏁版墠緇撴潫錛岄偅涔堬紝澶勭悊鍣ㄦ氮璐逛簡澶ч噺鏃墮棿鍦ㄧ綉緇滀紶杈撲笂銆?br />    鎿嶄綔緋葷粺鎻愪緵浜嗗紓姝ョ殑妯″紡鏉ヤ紶杈撶綉緇滄暟鎹紝宸ヤ綔妯″紡鍗籌細搴旂敤紼嬪簭鎶婅鍙戦佺殑鏁版嵁浜ょ粰鎿嶄綔緋葷粺錛屾搷浣滅郴緇熸妸鏁版嵁鏀懼湪緋葷粺緙撳啿鍖哄悗灝卞憡璇夊簲鐢ㄧ▼搴廜K浜嗭紝鎴戝府浣犲彂錛屽簲鐢ㄧ▼搴忚騫插槢騫插槢鍘匯傛搷浣滅郴緇熷彂閫佸畬鎴愬悗錛屼細緇欏簲鐢ㄧ郴緇熶竴涓洖鎵э紝鍛婅瘔搴旂敤紼嬪簭錛氬垰鎵嶉偅涓寘鍙戦佸畬鎴愪簡錛?br />   涓句釜渚嬪瓙錛氫綘鏈夊嚑灝侀偖浠跺拰鍖呰9瑕佸彂錛屾渶鏈夋晥鐜囩殑鍔炴硶鏄粈涔堬紵浣犳妸閭歡鍜屽寘瑁瑰強浜ょ粰鎬誨彴錛屾誨彴MM璇達紝濂戒簡錛屼綘甯綘鍙戯紝浣犲繖鍘誨惂錛佺劧鍚庝綘鍘誨伐浣滀簡銆傝繃浜嗕竴浼氾紝鎬誨彴MM鎵撶數璇濆憡璇変綘錛?#8220;鍒氭墠鎴戝彨蹇掑叕鍙哥殑浜烘潵浜嗭紝鎶婁綘鐨勫寘瑁瑰彂鍑哄幓浜嗐傞偖灞鐨勪漢涔熸潵浜嗭紝鍙栬蛋浜嗛偖浠訛紝鏀懼績濂戒簡”銆傚悓鏍鳳紝濡傛灉浣犵煡閬撲粖澶╀細鏈夊寘瑁規潵錛屾瘮濡備綘鍦ㄦ窐瀹濅笂璐墿浜嗭紝浣犺兘鎴愬ぉ絳夊湪鎬誨彴錛熶綘搴旇鍛婅瘔鎬誨彴MM錛?#8220;浠婂ぉ鍙兘鏈夋垜鐨勪竴涓揩閫掞紝浣犲府鎴戞敹涓涓嬶紝鏅氫笂璇蜂綘鑲痙鍩猴紒”銆侻M錛?#8220;鐪嬪湪鑲緱鍩虹殑闈㈠瓙涓婏紝甯綘鏀朵簡”銆傛煇涓椂闂達紝MM鎵撶數璇濇潵浜嗭細“甯呭摜錛屼綘鐨勫寘瑁瑰埌浜嗭紝鎴戝府浣犵鏀朵簡錛屽揩鏉ユ嬁鍚с?#8221;
   鍥犱負鎿嶄綔緋葷粺鏄緢鏈夋晥鐜囩殑錛屾墍鏈夛紝浠栧湪鍚庡彴鏀跺彂鏄緢蹇殑銆傚簲鐢ㄧ▼搴忎篃寰堢畝鍗曘侾roactor灝辨槸榪欑寮傛妯″紡鐨勩侾roactor灝辨槸鎬誨彴MM錛汚CE_Service_Handle灝辨槸鎬誨彴浠d負鏀跺彂閭歡鐨勫叕鍙告祦紼嬨?/p>

鎴戜滑鐪嬩竴涓疄渚嬶細


//***********************************************************
class TPTCPAsynchServerImpl : public ACE_Service_Handler
{
public:
 TPTCPAsynchServerImpl(
void);
 
~TPTCPAsynchServerImpl(void);
 
virtual void open (ACE_HANDLE handle, ACE_Message_Block &message_block); 
 
virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result);
 
virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result);
 
virtual void  handle_time_out (const ACE_Time_Value &tv, const void *act=0);
private:
 
int initiate_read_stream (const ACE_Asynch_Read_Stream::Result &result);
 ACE_Asynch_Read_Stream rs_;
 ACE_Asynch_Write_Stream ws_;
};


榪欎釜渚嬪瓙浠嶢CE_Service_Handler緇ф壙榪囨潵錛孉CE_Service_Handle涓昏灝辨槸瀹氫箟浜嗕竴浜涘洖璋冨嚱鏁般?br />1銆?virtual void open (ACE_HANDLE handle, ACE_Message_Block &message_block);
  褰撴湁瀹㈡埛绔繛鎺ヤ笂鏉ワ紝榪炴帴寤虹珛鎴愬姛鍚嶱roactor浼氳皟鐢ㄨ繖涓柟娉曘?/p>

2銆?virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result);
褰撶敤鎴瘋璇葷殑鏁版嵁璇誨ソ浜嗗悗錛岃皟鐢ㄨ繖涓柟娉?/p>

3銆乿irtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result);
褰撶敤鎴瘋鍐欑殑鏁版嵁鍦ㄧ綉鍗′笂鍙戦佹垚鍔熷悗錛孭roactor浼氬洖璋冭繖涓柟娉?/p>

4銆?virtual void  handle_time_out (const ACE_Time_Value &tv, const void *act=0);
褰撶敤鎴瘋瀹氱殑鏃墮挓鍒版湡浜嗭紝榪欎釜鏂規硶浼氳璋冪敤銆?/p>

榪欒窡鍜屾誨彴MM鐨勮仈緇滄柟娉曟槸涓嶆槸涓鏍風殑錛?/p>

瀵硅繕緙虹偣涓滆タ錛岀己灝戞庝箞鍚戞誨彴MM浜ゅ緟浠誨姟鐨勬柟娉曘備笅闈㈢湅鐪嬶細

棣栧厛錛屽垱寤轟竴涓洃鍚櫒銆?/p>

 ACE_Asynch_Acceptor<TPTCPAsynchServerImpl> acceptor_;
鐪嬪埌娌★紝灝辨槸鎴戜滑鍒氭墠鍐欑殑綾伙紝鍥犱負浠栫戶鎵夸簡鍥炶皟鎺ュ彛錛屽茍瀹炵幇浜嗚嚜宸茬殑浠g爜錛屾ā鏉夸腑ACE_Asynch_Acceptor浼氬湪鍚堥傜殑鏃跺欏洖璋冭繖浜涙柟娉曘?/p>

//鍒涘緩涓涓湴鍧瀵硅薄
 ACE_INET_Addr addr(port, ip);
acceptor_.open (addr, 8 * 1024, 1);
    Open鍚庯紝灝卞紑濮嬬洃鍚簡銆傚叾瀹冪殑錛屽悜Proactor娉ㄥ唽涓浜涗簨浠剁殑浜嬫ā鏉跨被涓兘鏇夸綘鍋氫簡錛屼綘涓嶉渶瑕佸仛寰堝浜嬨?br />    閭d箞錛屽凡緇忓紑濮嬬洃鍚簡錛屾垜鐨勭▼搴忎粠鍝噷寮濮嬪憿錛熷浜庝竴涓湇鍔$▼搴忔潵璁詫紝紼嬪簭鏄鐢ㄦ埛鐨勮繛鎺ラ┍鍔ㄧ殑錛屼竴涓敤鎴風▼搴忔兂鍜岄氳錛屽繀欏誨厛鍒涘緩榪炴帴錛屽氨鏄疭ocket涓殑connect鎿嶄綔銆傝繖涓搷浣淧roactor浼氭浛鎴戜滑鍋氫竴浜涘伐浣滐紝褰撹繛鎺ュ垱寤哄畬鎴愬悗錛屼笂闈㈣鐨凮pen鏂規硶浼氳璋冪敤錛屾垜浠湅鐪婳pen鏂規硶涓兘鏈変簺浠涔堜唬鐮侊細


void TPTCPAsynchServerImpl::open (ACE_HANDLE handle, ACE_Message_Block &message_block)
{
 ACE_DEBUG ((LM_DEBUG, 
"%N:%l:TPTCPAsynchServerImpl::open() "));
 
//鏋勯犺嫻?/span>
 if (rs_.open (*this, handle) == -1)
 {
  ACE_ERROR ((LM_ERROR, 
"%N:%l: ""TPTCPAsynchServerImpl::open() Error"));
  
return;
    }
 
//鏋勯犲啓嫻?/span>
 if (ws_.open(*this, handle) == -1)
 {
  ACE_ERROR ((LM_ERROR, 
"%N:%l: ""TPTCPAsynchServerImpl::open() Error"));
  
return;
    }
 
//鑾峰彇瀹㈡埛绔繛鎺ュ湴鍧鍜岀鍙?/span>
 ACE_INET_Addr addr; 
 ACE_SOCK_SEQPACK_Association ass
=ACE_SOCK_SEQPACK_Association(handle); 
 size_t addr_size
=1
 ass.get_local_addrs(
&addr,addr_size);
 
this->server_->onClientConnect((int)handle, addr.get_ip_address(), addr.get_port_number());

 

 
//濡傛灉瀹㈡埛榪炴帴鏃跺悓鏃舵彁浜や簡鏁版嵁錛岄渶瑕佷吉閫犱竴涓粨鏋滐紝鐒跺悗鍛煎彨璇諱簨浠?/span>
 if (message_block.length () != 0)
 {
 
// ACE_DEBUG((LM_DEBUG, "message_block.length() != 0 "));
  
// 澶嶅埗娑堟伅鍧?/span>
  ACE_Message_Block &duplicate =  *message_block.duplicate ();
  
// 浼犺緇撴灉錛屼互渚胯繘琛岃瀹屾垚鍥炶皟
  ACE_Asynch_Read_Stream_Result_Impl *fake_result =
        ACE_Proactor::instance ()
->create_asynch_read_stream_result (this->proxy (),
                                                                     
this->handle_,
                                                                     duplicate,
                                                                     
1024,
                                                                     
0,
                                                                     ACE_INVALID_HANDLE,
                                                                     
0,
                                                                     
0);
  size_t bytes_transferred 
= message_block.length ();
  
// Accept浜嬩歡澶勭悊瀹屾垚錛寃r_ptr鎸囬拡浼氳鍚戝墠縐誨姩錛屽皢鍏剁Щ鍔ㄥ埌寮濮嬩綅緗?/span>
  duplicate.wr_ptr (duplicate.wr_ptr () - bytes_transferred);
  
// 榪欎釜鏂規硶灝嗚皟鐢ㄥ洖璋冨嚱鏁?/span>
  fake_result->complete (message_block.length (), 10);
  
// 閿姣佷吉閫犵殑璇葷粨鏋?/span>
  delete fake_result;
 }

 
// 鍚﹀垯錛岄氱煡搴曞眰錛屽噯澶囪鍙栫敤鎴鋒暟鎹?br /> //鍒涘緩涓涓秷鎭潡銆傝繖涓秷鎭潡灝嗙敤浜庝粠濂楁帴瀛椾腑寮傛璇?nbsp;
 ACE_Message_Block *mb = 0;
  ACE_NEW (mb, ACE_Message_Block (_bufSize));
 
if (rs_.read (*mb, mb->size () - 1== -1)
 {
  delete mb;
  ACE_ERROR ((LM_ERROR, 
"%N:%l:open init read failed!"));
  
return;
 }
}

 

鎴戜滑鐪嬪埌錛岄鍏堝垱寤轟簡涓や釜嫻侊紝灝辨槸鍓嶉潰綾誨畾涔変腑瀹氫箟鐨勪竴涓紓姝ュ啓嫻侊紝涓涓紓姝ヨ嫻併備互鍚庡緗戠粶鐨勮鍜屽啓灝遍氳繃榪欎袱涓祦榪涜銆傛垜榪樼粰鍑轟簡涓孌佃瀹㈡埛绔湴鍧鍜岀鍙g殑浠g爜銆傜劧鍚庢槸璇誨彇瀹㈡埛Connect鍙兘闄勫甫鐨勬暟鎹紝閭f浠g爜涓嶇敤鐪嬫噦錛屼互鍚庝嬌鐢ㄧ収鎶勫氨琛屻傜劧鍚庡氨鏄?/p>

 


if (rs_.read (*mb, mb->size () - 1) == -1)
 {
  delete mb;
  ACE_ERROR ((LM_ERROR, "%N:%l:open init read failed!"));
  return;
 }

榪欐浠g爜浣跨敤璇繪祦璇諱竴孌墊暟鎹傝繖孌典唬鐮佸氨鏄悜鎬誨彴MM浜ゅ緟錛氭垜瑕佹敹鍖呰9錛屾敹濂戒簡鍙垜錛?br />涔熷氨鏄錛岃繖孌典唬鐮?9%鐨勫彲鑳芥槸璇諱笉鍑烘暟鎹殑錛屽彧鏄悜Proactor娉ㄥ唽璇葷殑浜嬩歡錛屽叿浣撶殑絳夊緟銆佽鍙栨搷浣滅敱Proactor璇伙紝璇誨埌浜嗭紝灝卞洖璋僅andle_Read_Stream鏂規硶銆侫CE_Message_Block鏄秷鎭潡錛屾暟鎹氨鏄瓨鏀懼湪娑堟伅鍧椾腑鐨勩?br />涓嬮潰鐪嬬湅Handle_Read_Stream鏂規硶鐨勪唬鐮侊細


void TPTCPAsynchServerImpl::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
 result.message_block ().rd_ptr ()[result.bytes_transferred ()] 
= '/0';
  ACE_DEBUG ((LM_DEBUG, 
"********************/n"));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""bytes_to_read", result.bytes_to_read ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""handle", result.handle ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""bytes_transfered", result.bytes_transferred ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""act", (u_long) result.act ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""success", result.success ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""completion_key", (u_long) result.completion_key ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d/n""error", result.error ()));
  ACE_DEBUG ((LM_DEBUG, 
"********************/n"));
 result.message_block().release();
 
if (this->initiate_read_stream (result) == -1)
 {
  ACE_ERROR((LM_ERROR, 
"%N:%l:read stream failed!connection closed, remove it:%d/n", result.handle()));
  closeConnection(result.handle());
 } 
}
 

榪欎釜鍑芥暟琚皟鐢紝灝辮〃鏄庢湁鏁版嵁宸茬粡璇誨ソ浜嗭紝鍖呰9宸茬粡鍦ㄦ誨彴浜嗐侾roactor姣旀誨彴MM榪樺ソ錛岀粰浣犻佷笂闂ㄤ簡錛屾暟鎹氨鍦≧esult閲岋紝涓婇潰婕旂ず浜哛esult涓殑鏁版嵁銆傜劧鍚庢妸娑堟伅鍧楅噴鏀句簡錛岀劧鍚庤皟鐢╥nitiate_read_stream緇х畫鐩戝惉緗戠粶涓婂彲鑳藉埌鏉ョ殑鏁版嵁銆傜湅鐪媔nitiate_read_stream濂戒簡錛?/p>


int TPTCPAsynchServerImpl::initiate_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
 ACE_DEBUG((LM_TRACE, 
"%N:%l:TPTCPAsynchServerImpl::initiate_read_stream() "));
 
//鍒涘緩涓涓秷鎭潡銆傝繖涓秷鎭潡灝嗙敤浜庝粠濂楁帴瀛椾腑寮傛璇?nbsp;
 ACE_Message_Block *mb = new ACE_Message_Block(_bufSize);
 
if (mb == NULL)
 {
  ACE_DEBUG((LM_ERROR, 
"%N:%l:can't allock ACE_Message_Block.  ")); 
  
return -1;
 }
 
 
if (rs_.read (*mb, mb->size () - 1== -1)
 {
  delete mb;
  ACE_ERROR_RETURN ((LM_ERROR, 
"%N:%l:rs->read() failed, clientID=%d ", result.handle()),  -1);
 }
 
return 0;
}

 

浠g爜寰堢畝鍗曪紝灝辨槸鍒涘緩涓涓柊鐨勬秷鎭潡錛岀劧鍚庝嬌鐢ㄨ嫻佹敞鍐屼竴涓娑堟伅灝卞彲浠ヤ簡銆?/p>

鍒版涓烘錛孭roactor鐨勮嫻佺▼寰堟竻妤氫簡鍚э紵

涓嬮潰鍐嶈涓涓啓嫻佺▼銆?/p>

鍐欐祦紼嬪叾瀹炴洿綆鍗曪紝鍦ㄤ換鎰忔兂鍚戝鎴風鍐欐暟鎹殑鍦版柟錛岃皟鐢ㄧ浉搴斾唬鐮佸氨琛屼簡錛屾瘮濡傦紝鎴戜滑鎻愪緵浜哠endData鏂規硶鏉ュ彂閫佹暟鎹紝鍦ㄤ換鎰忔兂鍙戦佹暟鎹殑鍦版柟璋冪敤SendData灝辮浜嗭紝SendData鐨勪唬鐮佸涓嬶細

int TPTCPAsynchServerImpl::sendData(int clientID, const char *data, int dataLen, unsigned int &id)
{
 ACE_DEBUG((LM_DEBUG, 
"TPTCPAsynchServerImpl::sendData(void) "));
 ACE_Message_Block 
*mb; 
 ACE_NEW_RETURN(mb, ACE_Message_Block(dataLen 
+ 1), -1);
 mb
->wr_ptr((char*)data);                  
 ACE_OS::memcpy(mb
->base(),(char*)data, dataLen);
 id 
= GlobleSingleton::instance()->getIndex();
 mb
->msg_type((int)id);
 
//鍚戞搷浣滅郴緇熷彂閫佹暟鎹?/span>
 if (connection->ws->write (*mb , dataLen ) == -1)
 {
  ACE_ERROR_RETURN((LM_ERROR, 
"%N:%l:sendData failed! clientID=%d ", clientID),-1);
 }
 
return 0;
}

 

綆鍗曡錛屽氨鏄垱寤轟簡涓涓秷鎭潡錛屾妸鐢ㄦ埛鏁版嵁鎷瘋礉榪涙潵錛岀劧鍚庤皟鐢ㄥ啓嫻乄S鍚慞roactor鍙戦佷竴涓猈rite浜嬩歡灝卞彲浠ヤ簡錛屽彂閫佹垚鍔熷悗錛孒andle_write_handle浼氳璋冪敤錛岀湅涓涓嬶細


void
TPTCPAsynchServerImpl::handle_write_stream (
const ACE_Asynch_Write_Stream::Result &result)
{
  ACE_DEBUG ((LM_DEBUG,
              
"handle_write_stream called "));
  
// Reset pointers.
  result.message_block ().rd_ptr (result.message_block ().rd_ptr () - result.bytes_transferred ());
  ACE_DEBUG ((LM_DEBUG, 
"******************** "));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""bytes_to_write", result.bytes_to_write ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""handle", result.handle ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""bytes_transfered", result.bytes_transferred ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""act", (u_long) result.act ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""success", result.success ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""completion_key", (u_long) result.completion_key ()));
  ACE_DEBUG ((LM_DEBUG, 
"%s = %d ""error", result.error ()));
  ACE_DEBUG ((LM_DEBUG, 
"******************** "));
#if 0
  ACE_DEBUG ((LM_DEBUG, 
"%s = %s ""message_block", result.message_block ().rd_ptr ()));
#endif
  
// Release message block.
  result.message_block ().release ();
}

 

浠g爜涓嬌鐢ㄤ簡result涓彂鏁版嵁錛岀劧鍚庢妸娑堟伅鍧楅噴鏀句簡錛屽氨榪欎箞綆鍗曘?/p>


////////////////////////////////////////////////////////////////////////////////////////////////////

榪欐槸綆鍗曠殑proactor鐢ㄦ硶錛屽綋鐒訛紝澶嶆潅涔熷熀鏈氨榪欐牱鐢ㄣ傛墍璋撲笉鍩烘湰鐨勪笉鏄疨roactor鐨勫唴瀹癸紝鑰屾槸鏈嶅姟鍣ㄧ紪紼嬫湰韜殑楹葷儲銆傛瘮濡傝錛屽涓繛鎺ョ殑綆$悊銆侀噸鍙戞満鍒躲佸彂閫侀槦鍒楃瓑絳夛紝榪欓兘涓嶆槸ACE鐨勫唴瀹廣傝繖浜涜澶у鑷繁鎬濊冧簡錛屽茍娣誨姞銆?/p>

鍦ㄨ繖閲岋紝鎴戣璇村嚑涓噸瑕佺殑闂錛氳繛鎺ョ殑綆$悊銆侫cceptor鏄竴涓被錛屼絾鏄湪姣忎竴涓繛鎺ワ紝Proactor閮界敤浜嗘煇縐嶅姙娉曞垱寤轟簡涓涓疄渚嬶紝鎵浠ワ紝榪炴帴綆$悊鐨勭兢闆嗙被涓瀹氫笉鑳藉湪Acceptor綾諱腑錛屼笉鐒跺緱鍒扮殑緇撴灉灝辨槸濮嬬粓鍙湁涓鏉¤褰曘傚洜涓烘瘡涓狝cceptor閮芥湁涓涓疄渚嬶紝瀹炰緥瀵瑰簲涓涓繛鎺ワ紝緹ら泦綾諱篃灝辨瘡涓疄渚嬩竴涓簡銆傝閲囧彇鐨勬柟娉曟槸涓涓叏灞鐨勫鍣ㄥ璞″氨鍙互浜嗐傛瘮濡傛垜榪欎釜綾伙細


typedef ACE_Map_Manager 
<ACE_HANDLE, ConnectionBean *, ACE_Null_Mutex> ConnectionMap;
typedef ACE_Map_Iterator
<ACE_HANDLE, ConnectionBean *, ACE_Null_Mutex> ConnectionIterator;
typedef ACE_Map_Entry   
<ACE_HANDLE, ConnectionBean *> ConnectionEntry;
class Globle
{
public:
 Globle(
void);
 
~Globle(void);
 ITPServer
* server_;
 ConnectionMap _connections;
 unsigned getIndex(
void); 
 
long getTimerId(void);
private:
 unsigned 
int index_;
 
long timerId_;
};
typedef ACE_Singleton
<Globle, ACE_Null_Mutex> GlobleSingleton;

 

鎴戜嬌鐢ˋCE鐨凷ingleton妯℃澘鍒涘緩榪欎釜綾伙紝姣忎竴涓狝cceptor瑕佷嬌鐢–onnectionMap錛岄兘浣跨敤榪欓噷鐨刜connections錛屾柟娉曞涓?錛?br />  GlobleSingleton::instance()->connection.bind()......

榪欎釜闂鍙槸鎴戣姳璐逛簡2澶╂椂闂存壘鍑烘潵鐨勶紝璇鎬綅鍚屼粊涓嶅彲涓嶆垝鍟婏紝緇欑偣鎺屽0錛氾級



C灝忓姞 2013-04-12 17:43 鍙戣〃璇勮
]]>
ACE緗戠粶緙栫▼絎旇錛?錛夛細ACE鑷傞厤閫氫俊鐜http://m.shnenglu.com/cxiaojia/archive/2013/04/08/199198.htmlC灝忓姞C灝忓姞Mon, 08 Apr 2013 01:48:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2013/04/08/199198.htmlhttp://m.shnenglu.com/cxiaojia/comments/199198.htmlhttp://m.shnenglu.com/cxiaojia/archive/2013/04/08/199198.html#Feedback0http://m.shnenglu.com/cxiaojia/comments/commentRss/199198.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/199198.html浠嬬粛


      ACE鑷傞厤閫氫俊鐜錛圓DAPTIVE Communication Environment錛夋槸鍙互鑷敱浣跨敤銆佸紑鏀炬簮鐮佺殑闈㈠悜瀵硅薄錛圤O錛夋瀯鏋訛紙Framework錛夛紝鍦ㄥ叾涓疄鐜頒簡璁稿鐢ㄤ簬騫跺彂閫氫俊杞歡鐨勬牳蹇冩ā寮忋侫CE鎻愪緵浜嗕竴緇勪赴瀵岀殑鍙鐢–++Wrapper Facade錛堝寘瑁呭瑙傦級鍜屾瀯鏋剁粍浠訛紝鍙法瓚婂縐嶅鉤鍙板畬鎴愰氱敤鐨勯氫俊杞歡浠誨姟錛屽叾涓寘鎷細浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼嬮棿閫氫俊銆佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾錛岀瓑絳夈?br />      ACE鐨勭洰鏍囩敤鎴鋒槸楂樻ц兘鍜屽疄鏃墮氫俊鏈嶅姟鍜屽簲鐢ㄧ殑寮鍙戣呫傚畠綆鍖栦簡浣跨敤榪涚▼闂撮氫俊銆佷簨浠跺璺垎紱匯佹樉寮忓姩鎬侀摼鎺ュ拰騫跺彂鐨凮O緗戠粶搴旂敤鍜屾湇鍔$殑寮鍙戙傛澶栵紝閫氳繃鏈嶅姟鍦ㄨ繍琛屾椂涓庡簲鐢ㄧ殑鍔ㄦ侀摼鎺ワ紝ACE榪樹嬌緋葷粺鐨勯厤緗拰閲嶉厤緗緱浠ヨ嚜鍔ㄥ寲銆?br />



濂藉


澧炲己鍙Щ妞嶆?/strong>錛氬湪ACE緇勪歡鐨勫府鍔╀笅錛屽緢瀹規槗鍦ㄤ竴縐峅S騫沖彴涓婄紪鍐欏茍鍙戠綉緇滃簲鐢紝鐒跺悗蹇熷湴灝嗗畠浠Щ妞嶅埌鍚勭鍏朵粬鐨凮S騫沖彴涓娿傝屼笖錛屽洜涓篈CE鏄紑鏀炬簮鐮佺殑鑷敱杞歡錛屼綘鏃犻渶鎷呭績琚攣瀹氬湪鐗瑰畾鐨勬搷浣滅郴緇熷鉤鍙版垨緙栬瘧鍣ㄤ笂銆?br />鏇村ソ鐨勮蔣浠惰川閲忥細ACE鐨勮璁′嬌鐢ㄤ簡璁稿鍙彁楂樿蔣浠惰川閲忕殑鍏抽敭妯″紡錛岃繖浜涜川閲忓洜绱犲寘鎷氫俊杞歡鐏墊椿鎬с佸彲鎵╁睍鎬с佸彲澶嶇敤鎬у拰妯″潡鎬с?br /> 鏇撮珮鐨勬晥鐜囧拰鍙嫻嬫э細ACE緇忎粩緇嗚璁★紝鏀寔騫挎硾鐨勫簲鐢ㄦ湇鍔¤川閲忥紙QoS錛夐渶姹傦紝鍖呮嫭寤惰繜鏁忔劅搴旂敤鐨勪綆鍝嶅簲絳夊緟鏃墮棿銆侀珮甯﹀搴旂敤鐨勯珮鎬ц兘錛屼互鍙婂疄鏃跺簲鐢ㄧ殑鍙嫻嬫с?br />鏇村鏄撹漿鎹㈠埌鏍囧噯鐨勯珮綰т腑闂翠歡錛?/strong>TAO浣跨敤浜咥CE鎻愪緵鐨勫彲澶嶇敤緇勪歡鍜屾ā寮忋傚畠鏄疌ORBA鐨勫紑鍙戞簮鐮併侀伒寰爣鍑嗙殑瀹炵幇錛屽茍涓洪珮鎬ц兘鍜屽疄鏃剁郴緇熶綔浜嗕紭鍖栥備負姝わ紝ACE鍜孴AO琚璁′負鑳借壇濂藉湴鍗忓悓宸ヤ綔錛屼互鎻愪緵鍏ㄩ潰鐨勪腑闂翠歡瑙e喅鏂規銆?br />
浣撶郴緇撴瀯


OS閫傞厤灞傦細ACE搴曞眰錛屽拰OS鐨凙PI鐩稿叧鐨勯儴鍒嗐傝繖閮ㄥ垎ACE鎶婁笉鍚岀被鍨嬬殑OS鎺ュ彛緇熶竴璧鋒潵錛岃ACE鐨勯珮灞傛憜鑴卞鉤鍙扮殑渚濊禆鎬с傞傞厤灞傚寮轟簡浠g爜鐨勫彲縐繪鎬с?br />C++鍖呰灞傦細ACE涓棿灞傦紝涓昏鍔熻兘鐨勫疄鐜伴儴鍒嗐傚寘鎷茍鍙戝拰鍚屾銆両PC銆佸唴瀛樼鐞嗙粍浠躲佸畾鏃跺櫒綾匯佸鍣ㄧ被銆佷俊鍙峰鐞嗐佹枃浠剁郴緇熺粍浠跺拰綰跨▼綆$悊銆?br />鏋勬灦鍜屾ā寮忓眰錛?/strong>ACE楂樺眰錛屾灦鏋勫拰妯″紡閮ㄥ垎銆傚畠浠殑鍩虹鏄嫢騫查拡瀵圭壒瀹氶氫俊杞歡棰嗗煙鐨勮璁℃ā寮忋傚寘鎷簨浠跺鐞嗐佽繛鎺ユ垨鏈嶅姟鍒濆鍖栫粍浠躲佹祦緇勪歡鍜屾湇鍔¢厤緗粍浠躲?br />

 



]]>
ACE緗戠粶緙栫▼涔婣CE_NEW_RETURN錛孉CE_NEW錛孉CE_NEW_NORETURNhttp://m.shnenglu.com/cxiaojia/archive/2013/03/26/198838.htmlC灝忓姞C灝忓姞Tue, 26 Mar 2013 07:26:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2013/03/26/198838.htmlhttp://m.shnenglu.com/cxiaojia/comments/198838.htmlhttp://m.shnenglu.com/cxiaojia/archive/2013/03/26/198838.html#Feedback0http://m.shnenglu.com/cxiaojia/comments/commentRss/198838.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/198838.htmlOS_Memory.h鏄繖鏍峰畾涔夌殑銆?br />
#  if defined (ACE_HAS_NEW_NOTHROW)
#    define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
   do { POINTER = new (ACE_nothrow) CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \
   } while (0)
#    define ACE_NEW(POINTER,CONSTRUCTOR) \
   do { POINTER = new(ACE_nothrow) CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; return; } \
   } while (0)
#    define ACE_NEW_NORETURN(POINTER,CONSTRUCTOR) \
   do { POINTER = new(ACE_nothrow) CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; } \
   } while (0)

#  else

#    define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
   do { try { POINTER = new CONSTRUCTOR; } \
     catch (ACE_bad_alloc) { ACE_del_bad_alloc errno = ENOMEM; POINTER = 0; return RET_VAL; } \
   } while (0)

#    define ACE_NEW(POINTER,CONSTRUCTOR) \
   do { try { POINTER = new CONSTRUCTOR; } \
     catch (ACE_bad_alloc) { ACE_del_bad_alloc errno = ENOMEM; POINTER = 0; return; } \
   } while (0)

#    define ACE_NEW_NORETURN(POINTER,CONSTRUCTOR) \
   do { try { POINTER = new CONSTRUCTOR; } \
     catch (ACE_bad_alloc) { ACE_del_bad_alloc errno = ENOMEM; POINTER = 0; } \
   } while (0)
#  endif /* ACE_HAS_NEW_NOTHROW */

#else /* ACE_NEW_THROWS_EXCEPTIONS */

# define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
   do { POINTER = new CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \
   } while (0)
# define ACE_NEW(POINTER,CONSTRUCTOR) \
   do { POINTER = new CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; return; } \
   } while (0)
# define ACE_NEW_NORETURN(POINTER,CONSTRUCTOR) \
   do { POINTER = new CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; } \
   } while (0)

浠ヤ笂鏄敤瀹忓畾涔夋浛鎹㈢殑琛ㄨ揪寮忥紝鍔熻兘閮芥槸鐢ㄤ竴涓狿OINTER鎸囬拡new涓涓狢ONSTRUCTOR瀹炰緥錛屽唴閮ㄥ仛浜嗕竴浜涢敊璇俊鎭殑鏍囧織鍜屽紓甯稿鐞嗐?br />瀹廼felse瀵瑰鉤鍙扮殑涓嶅悓榪涜浜嗗垎紱伙紝姣忎釜騫沖彴涓嬮兘鏈変笁縐峮ew鐨勬柟娉曪紝浠栦滑鐨勫尯鍒槸return銆?br />姣忎釜瀹忓畾涔夐兘鐢ㄥ埌浜哾o{}while(0)錛屾槸鍥犱負瀹忓彧鑳芥浛鎹竴鍙ヨ〃杈懼紡錛岃屼綘鐢╠o{}while(0)鍙互鏂逛究鐨勬妸澶氫釜琛ㄨ揪寮忛泦涓搗鏉ャ?img src ="http://m.shnenglu.com/cxiaojia/aggbug/198838.html" width = "1" height = "1" />

]]>
socket闃誨涓庨潪闃誨錛屽悓姝ヤ笌寮傛銆両/O妯″瀷(杞?http://m.shnenglu.com/cxiaojia/archive/2013/03/26/198831.htmlC灝忓姞C灝忓姞Tue, 26 Mar 2013 05:36:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2013/03/26/198831.htmlhttp://m.shnenglu.com/cxiaojia/comments/198831.htmlhttp://m.shnenglu.com/cxiaojia/archive/2013/03/26/198831.html#Feedback0http://m.shnenglu.com/cxiaojia/comments/commentRss/198831.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/198831.html

杞嚜錛?a >http://blog.csdn.net/hguisu/article/details/7453390


1. 姒傚康鐞嗚В

     鍦ㄨ繘琛岀綉緇滅紪紼嬫椂錛屾垜浠父甯歌鍒?span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif, 瀹嬩綋; font-size: 12px; line-height: 16px; text-indent: 24px;">鍚屾(Sync)/寮傛(Async)錛岄樆濉?Block)/闈為樆濉?Unblock)鍥涚璋冪敤鏂瑰紡錛?/span>
鍚屾錛?/span>
      
鎵璋撳悓姝ワ紝灝辨槸鍦ㄥ彂鍑轟竴涓姛鑳借皟鐢ㄦ椂錛屽湪娌℃湁寰楀埌緇撴灉涔嬪墠錛岃璋冪敤灝變笉榪斿洖銆?/span>涔熷氨鏄繀欏諱竴浠朵竴浠朵簨鍋?/strong>,絳夊墠涓浠跺仛瀹屼簡鎵嶈兘鍋氫笅涓浠朵簨銆?/span>

渚嬪鏅?span style="margin: 0px; padding: 0px; font-family: 'Times New Roman';">B/S妯″紡錛堝悓姝ワ級錛氭彁浜よ姹?span style="margin: 0px; padding: 0px; font-family: 'Times New Roman';">->絳夊緟鏈嶅姟鍣ㄥ鐞?span style="margin: 0px; padding: 0px; font-family: 'Times New Roman';">->澶勭悊瀹屾瘯榪斿洖 榪欎釜鏈熼棿瀹㈡埛绔祻瑙堝櫒涓嶈兘騫蹭換浣曚簨

寮傛錛?/span>
      
寮傛鐨勬蹇靛拰鍚屾鐩稿銆傚綋涓涓紓姝ヨ繃紼嬭皟鐢ㄥ彂鍑哄悗錛岃皟鐢ㄨ呬笉鑳界珛鍒誨緱鍒扮粨鏋溿傚疄闄呭鐞嗚繖涓皟鐢ㄧ殑閮ㄤ歡鍦ㄥ畬鎴愬悗錛岄氳繃鐘舵併侀氱煡鍜屽洖璋冩潵閫氱煡璋冪敤鑰呫?/span>

     渚嬪 ajax璇鋒眰錛?/span>寮傛錛?/span>璇鋒眰閫氳繃浜嬩歡瑙﹀彂->鏈嶅姟鍣ㄥ鐞嗭紙榪欐槸嫻忚鍣ㄤ粛鐒跺彲浠ヤ綔鍏朵粬浜嬫儏錛?/span>->澶勭悊瀹屾瘯

闃誨
     
闃誨璋冪敤鏄寚璋冪敤緇撴灉榪斿洖涔嬪墠錛屽綋鍓嶇嚎紼嬩細琚寕璧鳳紙綰跨▼榪涘叆闈炲彲鎵ц鐘舵侊紝鍦ㄨ繖涓姸鎬佷笅錛宑pu涓嶄細緇欑嚎紼嬪垎閰嶆椂闂寸墖錛屽嵆綰跨▼鏆傚仠榪愯錛夈傚嚱鏁板彧鏈夊湪寰楀埌緇撴灉涔嬪悗鎵嶄細榪斿洖銆?/span>

     鏈変漢涔熻浼氭妸闃誨璋冪敤鍜屽悓姝ヨ皟鐢ㄧ瓑鍚岃搗鏉ワ紝瀹為檯涓婁粬鏄笉鍚岀殑銆傚浜庡悓姝ヨ皟鐢ㄦ潵璇達紝寰堝鏃跺欏綋鍓嶇嚎紼嬭繕鏄縺媧葷殑錛屽彧鏄粠閫昏緫涓婂綋鍓嶅嚱鏁版病鏈夎繑鍥炶屽凡銆?/span> 渚嬪錛屾垜浠湪socket涓皟鐢╮ecv鍑芥暟錛屽鏋滅紦鍐插尯涓病鏈夋暟鎹紝榪欎釜鍑芥暟灝變細涓鐩寸瓑寰咃紝鐩村埌鏈夋暟鎹墠榪斿洖銆傝屾鏃訛紝褰撳墠綰跨▼榪樹細緇х畫澶勭悊鍚勭鍚勬牱鐨勬秷鎭?/span>

闈為樆濉?/strong>
      
闈為樆濉炲拰闃誨鐨勬蹇電浉瀵瑰簲錛屾寚鍦ㄤ笉鑳界珛鍒誨緱鍒扮粨鏋滀箣鍓嶏紝璇ュ嚱鏁頒笉浼氶樆濉炲綋鍓嶇嚎紼嬶紝鑰屼細绔嬪埢榪斿洖銆?/span>
瀵硅薄鐨勯樆濉炴ā寮忓拰闃誨鍑芥暟璋冪敤
瀵硅薄鏄惁澶勪簬闃誨妯″紡鍜屽嚱鏁版槸涓嶆槸闃誨璋冪敤鏈夊緢寮虹殑鐩稿叧鎬э紝浣嗘槸騫朵笉鏄竴涓瀵瑰簲鐨勩傞樆濉炲璞′笂鍙互鏈夐潪闃誨鐨勮皟鐢ㄦ柟寮忥紝鎴戜滑鍙互閫氳繃涓瀹氱殑API鍘昏疆璇㈢姸 鎬侊紝鍦ㄩ傚綋鐨勬椂鍊欒皟鐢ㄩ樆濉炲嚱鏁幫紝灝卞彲浠ラ伩鍏嶉樆濉炪傝屽浜庨潪闃誨瀵硅薄錛岃皟鐢ㄧ壒孌婄殑鍑芥暟涔熷彲浠ヨ繘鍏ラ樆濉炶皟鐢ㄣ傚嚱鏁?/span>select灝辨槸榪欐牱鐨勪竴涓緥瀛愩?/span>

 

1. 鍚屾錛屽氨鏄垜璋冪敤涓涓姛鑳斤紝璇ュ姛鑳芥病鏈夌粨鏉熷墠錛屾垜姝葷瓑緇撴灉銆?/span>
2. 寮傛錛屽氨鏄?span style="margin: 0px; padding: 0px; line-height: 20px;">鎴戣皟鐢ㄤ竴涓姛鑳斤紝涓嶉渶瑕佺煡閬撹鍔熻兘緇撴灉錛岃鍔熻兘鏈夌粨鏋滃悗閫氱煡鎴戯紙鍥炶皟閫氱煡錛?/span>
3. 闃誨錛?     灝辨槸璋冪敤鎴戯紙鍑芥暟錛夛紝鎴?span style="margin: 0px; padding: 0px; line-height: 20px;">錛堝嚱鏁幫級娌℃湁鎺ユ敹瀹屾暟鎹垨鑰呮病鏈夊緱鍒扮粨鏋滀箣鍓嶏紝鎴戜笉浼氳繑鍥炪?/span>
4. 闈為樆濉烇紝  灝辨槸璋冪敤鎴?span style="margin: 0px; padding: 0px; line-height: 20px;">錛堝嚱鏁幫級錛屾垜錛堝嚱鏁幫級绔嬪嵆榪斿洖錛?span style="margin: 0px; padding: 0px; line-height: 20px;">閫氳繃select閫氱煡璋冪敤鑰?/span>

鍚屾IO鍜屽紓姝O鐨勫尯鍒氨鍦ㄤ簬錛?span style="margin: 0px; padding: 0px; color: #ff0000;">鏁版嵁鎷瘋礉鐨勬椂鍊欒繘紼嬫槸鍚﹂樆濉烇紒

闃誨IO鍜岄潪闃誨IO鐨勫尯鍒氨鍦ㄤ簬錛?/span>搴旂敤紼嬪簭鐨勮皟鐢ㄦ槸鍚︾珛鍗寵繑鍥烇紒


瀵逛簬涓句釜綆鍗昪/s 妯″紡錛?/span>

鍚屾錛?/span>鎻愪氦璇鋒眰->絳夊緟鏈嶅姟鍣ㄥ鐞?>澶勭悊瀹屾瘯榪斿洖榪欎釜鏈熼棿瀹㈡埛绔祻瑙堝櫒涓嶈兘騫蹭換浣曚簨
寮傛錛?/span>璇鋒眰閫氳繃浜嬩歡瑙﹀彂->鏈嶅姟鍣ㄥ鐞嗭紙榪欐槸嫻忚鍣ㄤ粛鐒跺彲浠ヤ綔鍏朵粬浜嬫儏錛?>澶勭悊瀹屾瘯
鍚屾鍜屽紓姝ラ兘鍙拡瀵逛簬鏈満SOCKET鑰岃█鐨勩?/span>

鍚屾鍜屽紓姝?闃誨鍜岄潪闃誨,鏈変簺娣風敤,鍏跺疄瀹冧滑瀹屽叏涓嶆槸涓鍥炰簨,鑰屼笖瀹冧滑淇グ鐨勫璞′篃涓嶇浉鍚屻?br style="margin: 0px; padding: 0px;" />闃誨鍜岄潪闃誨鏄寚褰撹繘紼嬭闂殑鏁版嵁濡傛灉灝氭湭灝辯華,榪涚▼鏄惁闇瑕佺瓑寰?綆鍗曡榪欑浉褰撲簬鍑芥暟鍐呴儴鐨勫疄鐜板尯鍒?/span>,涔熷氨鏄湭灝辯華鏃舵槸鐩存帴榪斿洖榪樻槸絳夊緟灝辯華;

鑰屽悓姝ュ拰寮傛鏄?/span>鎸囪闂暟鎹殑鏈哄埗,鍚屾涓鑸寚涓誨姩璇鋒眰騫剁瓑寰匢/O鎿嶄綔瀹屾瘯鐨勬柟寮?褰撴暟鎹氨緇悗鍦ㄨ鍐欑殑鏃跺欏繀欏婚樆濉?鍖哄埆灝辯華涓庤鍐欎簩涓樁孌?鍚屾鐨勮鍐欏繀欏婚樆濉?,寮傛鍒欐寚涓誨姩璇鋒眰鏁版嵁鍚庝究鍙互緇х畫澶勭悊鍏跺畠浠誨姟,闅忓悗絳夊緟I/O,鎿嶄綔瀹屾瘯鐨勯氱煡,榪欏彲浠ヤ嬌榪涚▼鍦ㄦ暟鎹鍐欐椂涔熶笉闃誨銆?絳夊緟"閫氱煡")

1. Linux涓嬬殑浜旂I/O妯″瀷

1)闃誨I/O錛坆locking I/O錛?br style="margin: 0px; padding: 0px;" />2)闈為樆濉濱/O 錛坣onblocking I/O錛?/span>
3) I/O澶嶇敤(select 鍜宲oll) 錛圛/O multiplexing錛?/span>
4)淇″彿椹卞姩I/O 錛坰ignal driven I/O (SIGIO)錛?/span>
5)寮傛I/O 錛坅synchronous I/O (the POSIX aio_functions)錛?/span>

鍓嶅洓縐嶉兘鏄悓姝ワ紝鍙湁鏈鍚庝竴縐嶆墠鏄紓姝O銆?/p>

闃誨I/O妯″瀷錛?/span>

        綆浠嬶細榪涚▼浼?/span>涓鐩撮樆濉?/span>錛岀洿鍒版暟鎹嫹璐濆畬鎴?/span>

     搴旂敤紼嬪簭璋冪敤涓涓狪O鍑芥暟錛屽鑷村簲鐢ㄧ▼搴忛樆濉烇紝絳夊緟鏁版嵁鍑嗗濂姐?濡傛灉鏁版嵁娌℃湁鍑嗗濂斤紝涓鐩寸瓑寰?#8230;.鏁版嵁鍑嗗濂戒簡錛屼粠鍐呮牳鎷瘋礉鍒扮敤鎴風┖闂?IO鍑芥暟榪斿洖鎴愬姛鎸囩ず銆?/span>

闃誨I/O妯″瀷鍥撅細鍦ㄨ皟鐢╮ecv()/recvfrom錛堬級鍑芥暟鏃訛紝鍙戠敓鍦ㄥ唴鏍鎬腑絳夊緟鏁版嵁鍜屽鍒舵暟鎹殑榪囩▼銆?/span>


    褰撹皟鐢╮ecv()鍑芥暟鏃訛紝緋葷粺棣栧厛鏌ユ槸鍚︽湁鍑嗗濂界殑鏁版嵁銆傚鏋滄暟鎹病鏈夊噯澶囧ソ錛岄偅涔堢郴緇熷氨澶勪簬絳夊緟鐘舵併傚綋鏁版嵁鍑嗗濂藉悗錛屽皢鏁版嵁浠庣郴緇熺紦鍐插尯澶嶅埗鍒扮敤鎴風┖闂達紝鐒跺悗璇ュ嚱鏁拌繑鍥炪傚湪濂楁帴搴旂敤紼嬪簭涓紝褰撹皟鐢╮ecv()鍑芥暟鏃訛紝鏈繀鐢ㄦ埛絀洪棿灝卞凡緇忓瓨鍦ㄦ暟鎹紝閭d箞姝ゆ椂recv()鍑芥暟灝變細澶勪簬絳夊緟鐘舵併?br style="margin: 0px; padding: 0px;" />

     褰撲嬌鐢╯ocket()鍑芥暟鍜學SASocket()鍑芥暟鍒涘緩濂楁帴瀛楁椂錛岄粯璁ょ殑濂楁帴瀛楅兘鏄樆濉炵殑銆傝繖鎰忓懗鐫褰撹皟鐢╓indows Sockets API涓嶈兘绔嬪嵆瀹屾垚鏃訛紝綰跨▼澶勪簬絳夊緟鐘舵侊紝鐩村埌鎿嶄綔瀹屾垚銆?/span>

    騫朵笉鏄墍鏈塛indows Sockets API浠ラ樆濉炲鎺ュ瓧涓哄弬鏁拌皟鐢ㄩ兘浼氬彂鐢熼樆濉炪備緥濡傦紝浠ラ樆濉炴ā寮忕殑濂楁帴瀛椾負鍙傛暟璋冪敤bind()銆乴isten()鍑芥暟鏃訛紝鍑芥暟浼氱珛鍗寵繑鍥炪傚皢鍙兘闃誨濂楁帴瀛楃殑Windows Sockets API璋冪敤鍒嗕負浠ヤ笅鍥涚:

    1錛庤緭鍏ユ搷浣滐細 recv()銆乺ecvfrom()銆乄SARecv()鍜學SARecvfrom()鍑芥暟銆備互闃誨濂楁帴瀛椾負鍙傛暟璋冪敤璇ュ嚱鏁版帴鏀舵暟鎹傚鏋滄鏃跺鎺ュ瓧緙撳啿鍖哄唴娌℃湁鏁版嵁鍙錛屽垯璋冪敤綰跨▼鍦ㄦ暟鎹埌鏉ュ墠涓鐩寸潯鐪犮?/span>

    2錛庤緭鍑烘搷浣滐細 send()銆乻endto()銆乄SASend()鍜學SASendto()鍑芥暟銆備互闃誨濂楁帴瀛椾負鍙傛暟璋冪敤璇ュ嚱鏁板彂閫佹暟鎹傚鏋滃鎺ュ瓧緙撳啿鍖烘病鏈夊彲鐢ㄧ┖闂達紝綰跨▼浼氫竴鐩寸潯鐪狅紝鐩村埌鏈夌┖闂淬?/span>

    3錛庢帴鍙楄繛鎺ワ細accept()鍜學SAAcept()鍑芥暟銆備互闃誨濂楁帴瀛椾負鍙傛暟璋冪敤璇ュ嚱鏁幫紝絳夊緟鎺ュ彈瀵規柟鐨勮繛鎺ヨ姹傘傚鏋滄鏃舵病鏈夎繛鎺ヨ姹傦紝綰跨▼灝變細榪涘叆鐫$湢鐘舵併?/span>

   4錛庡鍑鴻繛鎺ワ細connect()鍜學SAConnect()鍑芥暟銆傚浜嶵CP榪炴帴錛屽鎴風浠ラ樆濉炲鎺ュ瓧涓哄弬鏁幫紝璋冪敤璇ュ嚱鏁板悜鏈嶅姟鍣ㄥ彂璧瘋繛鎺ャ傝鍑芥暟鍦ㄦ敹鍒版湇鍔″櫒鐨勫簲絳斿墠錛屼笉浼氳繑鍥炪傝繖鎰忓懗鐫TCP榪炴帴鎬諱細絳夊緟鑷沖皯鍒版湇鍔″櫒鐨勪竴嬈″線榪旀椂闂淬?/span>

銆銆浣跨敤闃誨妯″紡鐨勫鎺ュ瓧錛屽紑鍙戠綉緇滅▼搴忔瘮杈冪畝鍗曪紝瀹規槗瀹炵幇銆傚綋甯屾湜鑳藉绔嬪嵆鍙戦佸拰鎺ユ敹鏁版嵁錛屼笖澶勭悊鐨勫鎺ュ瓧鏁伴噺姣旇緝灝戠殑鎯呭喌涓嬶紝浣跨敤闃誨妯″紡鏉ュ紑鍙戠綉緇滅▼搴忔瘮杈冨悎閫傘?/span>

    闃誨妯″紡濂楁帴瀛楃殑涓嶈凍琛ㄧ幇涓猴紝鍦ㄥぇ閲忓緩绔嬪ソ鐨勫鎺ュ瓧綰跨▼涔嬮棿榪涜閫氫俊鏃舵瘮杈冨洶闅俱傚綋浣跨敤“鐢熶駭鑰?娑堣垂鑰?#8221;妯″瀷寮鍙戠綉緇滅▼搴忔椂錛屼負姣忎釜濂楁帴瀛楅兘鍒嗗埆鍒嗛厤涓涓綰跨▼銆佷竴涓鐞嗘暟鎹嚎紼嬪拰涓涓敤浜庡悓姝ョ殑浜嬩歡錛岄偅涔堣繖鏍鋒棤鐤戝姞澶х郴緇熺殑寮閿銆傚叾鏈澶х殑緙虹偣鏄綋甯屾湜鍚屾椂澶勭悊澶ч噺濂楁帴瀛楁椂錛屽皢鏃犱粠涓嬫墜錛屽叾鎵╁睍鎬у緢宸?/span>

闈為樆濉濱O妯″瀷 

       綆浠嬶細闈為樆濉濱O閫氳繃榪涚▼鍙嶅璋冪敤IO鍑芥暟錛?/span>澶氭緋葷粺璋冪敤錛屽茍椹笂榪斿洖錛夛紱鍦ㄦ暟鎹嫹璐濈殑榪囩▼涓紝榪涚▼鏄樆濉炵殑錛?/span>

       

       鎴戜滑鎶婁竴涓猄OCKET鎺ュ彛璁劇疆涓洪潪闃誨灝辨槸鍛婅瘔鍐呮牳錛屽綋鎵璇鋒眰鐨処/O鎿嶄綔鏃犳硶瀹屾垚鏃訛紝涓嶈灝嗚繘紼嬬潯鐪狅紝鑰屾槸榪斿洖涓涓敊璇傝繖鏍鋒垜浠殑I/O鎿嶄綔鍑芥暟灝嗕笉鏂殑嫻嬭瘯鏁版嵁鏄惁宸茬粡鍑嗗濂斤紝濡傛灉娌℃湁鍑嗗濂斤紝緇х畫嫻嬭瘯錛岀洿鍒版暟鎹噯澶囧ソ涓烘銆傚湪榪欎釜涓嶆柇嫻嬭瘯鐨勮繃紼嬩腑錛屼細澶ч噺鐨勫崰鐢–PU鐨勬椂闂淬?/span>

    鎶?span style="margin: 0px; padding: 0px; font-size: 14px;">SOCKET璁劇疆涓洪潪闃誨妯″紡錛屽嵆閫氱煡緋葷粺鍐呮牳錛氬湪璋冪敤Windows Sockets API鏃訛紝涓嶈璁╃嚎紼嬬潯鐪狅紝鑰屽簲璇ヨ鍑芥暟绔嬪嵆榪斿洖銆傚湪榪斿洖鏃訛紝璇ュ嚱鏁拌繑鍥炰竴涓敊璇唬鐮併傚浘鎵紺猴紝涓涓潪闃誨妯″紡濂楁帴瀛楀嬈¤皟鐢╮ecv()鍑芥暟鐨勮繃紼嬨傚墠涓夋璋冪敤recv()鍑芥暟鏃訛紝鍐呮牳鏁版嵁榪樻病鏈夊噯澶囧ソ銆傚洜姝わ紝璇ュ嚱鏁扮珛鍗寵繑鍥濿SAEWOULDBLOCK閿欒浠g爜銆傜鍥涙璋冪敤recv()鍑芥暟鏃訛紝鏁版嵁宸茬粡鍑嗗濂斤紝琚鍒跺埌搴旂敤紼嬪簭鐨勭紦鍐插尯涓紝recv()鍑芥暟榪斿洖鎴愬姛鎸囩ず錛屽簲鐢ㄧ▼搴忓紑濮嬪鐞嗘暟鎹?/span>



     褰撲嬌鐢╯ocket()鍑芥暟鍜學SASocket()鍑芥暟鍒涘緩濂楁帴瀛楁椂錛岄粯璁ら兘鏄樆濉炵殑銆傚湪鍒涘緩濂楁帴瀛椾箣鍚庯紝閫氳繃璋冪敤ioctlsocket()鍑芥暟錛屽皢璇ュ鎺ュ瓧璁劇疆涓洪潪闃誨妯″紡銆侺inux涓嬬殑鍑芥暟鏄?fcntl().
    濂楁帴瀛楄緗負闈為樆濉炴ā寮忓悗錛屽湪璋冪敤Windows Sockets API鍑芥暟鏃訛紝璋冪敤鍑芥暟浼氱珛鍗寵繑鍥炪傚ぇ澶氭暟鎯呭喌涓嬶紝榪欎簺鍑芥暟璋冪敤閮戒細璋冪敤“澶辮觸”錛屽茍榪斿洖WSAEWOULDBLOCK閿欒浠g爜銆傝鏄庤姹傜殑鎿嶄綔鍦ㄨ皟鐢ㄦ湡闂村唴娌℃湁鏃墮棿瀹屾垚銆傞氬父錛屽簲鐢ㄧ▼搴忛渶瑕侀噸澶嶈皟鐢ㄨ鍑芥暟錛岀洿鍒拌幏寰楁垚鍔熻繑鍥炰唬鐮併?/span>

    闇瑕佽鏄庣殑鏄茍闈炴墍鏈夌殑Windows Sockets API鍦ㄩ潪闃誨妯″紡涓嬭皟鐢紝閮戒細榪斿洖WSAEWOULDBLOCK閿欒銆備緥濡傦紝浠ラ潪闃誨妯″紡鐨勫鎺ュ瓧涓哄弬鏁拌皟鐢╞ind()鍑芥暟鏃訛紝灝變笉浼氳繑鍥炶閿欒浠g爜銆傚綋鐒訛紝鍦ㄨ皟鐢╓SAStartup()鍑芥暟鏃舵洿涓嶄細榪斿洖璇ラ敊璇唬鐮侊紝鍥犱負璇ュ嚱鏁版槸搴旂敤紼嬪簭絎竴璋冪敤鐨勫嚱鏁幫紝褰撶劧涓嶄細榪斿洖榪欐牱鐨勯敊璇唬鐮併?/span>

    瑕佸皢濂楁帴瀛楄緗負闈為樆濉炴ā寮忥紝闄や簡浣跨敤ioctlsocket()鍑芥暟涔嬪錛岃繕鍙互浣跨敤WSAAsyncselect()鍜學SAEventselect()鍑芥暟銆傚綋璋冪敤璇ュ嚱鏁版椂錛屽鎺ュ瓧浼氳嚜鍔ㄥ湴璁劇疆涓洪潪闃誨鏂瑰紡銆?br style="margin: 0px; padding: 0px;" />

銆銆鐢變簬浣跨敤闈為樆濉炲鎺ュ瓧鍦ㄨ皟鐢ㄥ嚱鏁版椂錛屼細緇忓父榪斿洖WSAEWOULDBLOCK閿欒銆傛墍浠ュ湪浠諱綍鏃跺欙紝閮藉簲浠旂粏媯鏌ヨ繑鍥炰唬鐮佸茍浣滃ソ瀵?#8220;澶辮觸”鐨勫噯澶囥傚簲鐢ㄧ▼搴忚繛緇笉鏂湴璋冪敤榪欎釜鍑芥暟錛岀洿鍒板畠榪斿洖鎴愬姛鎸囩ず涓烘銆備笂闈㈢殑紼嬪簭娓呭崟涓紝鍦╓hile寰幆浣撳唴涓嶆柇鍦拌皟鐢╮ecv()鍑芥暟錛屼互璇誨叆1024涓瓧鑺傜殑鏁版嵁銆傝繖縐嶅仛娉曞緢嫻垂緋葷粺璧勬簮銆?/span>

    瑕佸畬鎴愯繖鏍風殑鎿嶄綔錛屾湁浜轟嬌鐢∕SG_PEEK鏍囧織璋冪敤recv()鍑芥暟鏌ョ湅緙撳啿鍖轟腑鏄惁鏈夋暟鎹彲璇匯傚悓鏍鳳紝榪欑鏂規硶涔熶笉濂姐傚洜涓鴻鍋氭硶瀵圭郴緇熼犳垚鐨勫紑閿鏄緢澶х殑錛屽茍涓斿簲鐢ㄧ▼搴忚嚦灝戣璋冪敤recv()鍑芥暟涓ゆ錛屾墠鑳藉疄闄呭湴璇誨叆鏁版嵁銆傝緝濂界殑鍋氭硶鏄紝浣跨敤濂楁帴瀛楃殑“I/O妯″瀷”鏉ュ垽鏂潪闃誨濂楁帴瀛楁槸鍚﹀彲璇誨彲鍐欍?/span>

    闈為樆濉炴ā寮忓鎺ュ瓧涓庨樆濉炴ā寮忓鎺ュ瓧鐩告瘮錛屼笉瀹規槗浣跨敤銆備嬌鐢ㄩ潪闃誨妯″紡濂楁帴瀛楋紝闇瑕佺紪鍐欐洿澶氱殑浠g爜錛屼互渚垮湪姣忎釜Windows Sockets API鍑芥暟璋冪敤涓紝瀵規敹鍒扮殑WSAEWOULDBLOCK閿欒榪涜澶勭悊銆傚洜姝わ紝闈為樆濉炲鎺ュ瓧渚挎樉寰楁湁浜涢毦浜庝嬌鐢ㄣ?/span>

    浣嗘槸錛岄潪闃誨濂楁帴瀛楀湪鎺у埗寤虹珛鐨勫涓繛鎺ワ紝鍦ㄦ暟鎹殑鏀跺彂閲忎笉鍧囷紝鏃墮棿涓嶅畾鏃訛紝鏄庢樉鍏鋒湁浼樺娍銆傝繖縐嶅鎺ュ瓧鍦ㄤ嬌鐢ㄤ笂瀛樺湪涓瀹氶毦搴︼紝浣嗗彧瑕佹帓闄や簡榪欎簺鍥伴毦錛屽畠鍦ㄥ姛鑳戒笂榪樻槸闈炲父寮哄ぇ鐨勩傞氬父鎯呭喌涓嬶紝鍙冭檻浣跨敤濂楁帴瀛楃殑“I/O妯″瀷”錛屽畠鏈夊姪浜庡簲鐢ㄧ▼搴忛氳繃寮傛鏂瑰紡錛屽悓鏃跺涓涓垨澶氫釜濂楁帴瀛楃殑閫氫俊鍔犱互綆$悊銆?/span>


IO澶嶇敤妯″瀷錛?/span>

             綆浠嬶細涓昏鏄痵elect鍜宔poll錛涘涓涓狪O绔彛錛屼袱嬈¤皟鐢紝涓ゆ榪斿洖錛屾瘮闃誨IO騫舵病鏈変粈涔堜紭瓚婃э紱鍏抽敭鏄兘瀹炵幇鍚屾椂瀵瑰涓狪O绔彛榪涜鐩戝惉錛?/span>

      I/O澶嶇敤妯″瀷浼氱敤鍒皊elect銆乸oll銆乪poll鍑芥暟錛岃繖鍑犱釜鍑芥暟涔熶細浣胯繘紼嬮樆濉烇紝浣嗘槸鍜岄樆濉濱/O鎵涓嶅悓鐨勭殑錛岃繖涓や釜鍑芥暟鍙互鍚屾椂闃誨澶氫釜I/O鎿嶄綔銆傝屼笖鍙互鍚屾椂瀵瑰涓鎿嶄綔錛屽涓啓鎿嶄綔鐨処/O鍑芥暟榪涜媯嫻嬶紝鐩村埌鏈夋暟鎹彲璇繪垨鍙啓鏃訛紝鎵嶇湡姝h皟鐢↖/O鎿嶄綔鍑芥暟銆?/span>


淇″彿椹卞姩IO

    綆浠嬶細涓ゆ璋冪敤錛屼袱嬈¤繑鍥烇紱

    棣栧厛鎴戜滑鍏佽濂楁帴鍙h繘琛屼俊鍙烽┍鍔↖/O,騫跺畨瑁呬竴涓俊鍙峰鐞嗗嚱鏁幫紝榪涚▼緇х畫榪愯騫朵笉闃誨銆傚綋鏁版嵁鍑嗗濂芥椂錛岃繘紼嬩細鏀跺埌涓涓猄IGIO淇″彿錛屽彲浠ュ湪淇″彿澶勭悊鍑芥暟涓皟鐢↖/O鎿嶄綔鍑芥暟澶勭悊鏁版嵁銆?/span>


寮傛IO妯″瀷

         綆浠嬶細鏁版嵁鎷瘋礉鐨勬椂鍊欒繘紼嬫棤闇闃誨銆?/span>

     褰撲竴涓紓姝ヨ繃紼嬭皟鐢ㄥ彂鍑哄悗錛岃皟鐢ㄨ呬笉鑳界珛鍒誨緱鍒扮粨鏋溿傚疄闄呭鐞嗚繖涓皟鐢ㄧ殑閮ㄤ歡鍦ㄥ畬鎴愬悗錛岄氳繃鐘舵併侀氱煡鍜屽洖璋冩潵閫氱煡璋冪敤鑰呯殑杈撳叆杈撳嚭鎿嶄綔


鍚屾IO寮曡搗榪涚▼闃誨錛岀洿鑷矷O鎿嶄綔瀹屾垚銆?br style="margin: 0px; padding: 0px;" />寮傛IO涓嶄細寮曡搗榪涚▼闃誨銆?br style="margin: 0px; padding: 0px;" />IO澶嶇敤鏄厛閫氳繃select璋冪敤闃誨銆?br style="margin: 0px; padding: 0px;" />


5涓狪/O妯″瀷鐨勬瘮杈冿細



1. select銆乸oll銆乪poll綆浠?br style="margin: 0px; padding: 0px;" />

epoll璺焥elect閮借兘鎻愪緵澶氳礬I/O澶嶇敤鐨勮В鍐蟲柟妗堛傚湪鐜板湪鐨凩inux鍐呮牳閲屾湁閮借兘澶熸敮鎸侊紝鍏朵腑epoll鏄疞inux鎵鐗規湁錛岃宻elect鍒欏簲璇ユ槸POSIX鎵瑙勫畾錛屼竴鑸搷浣滅郴緇熷潎鏈夊疄鐜?/p>

select錛?/span>

select鏈川涓婃槸閫氳繃璁劇疆鎴栬呮鏌ュ瓨鏀緁d鏍囧織浣嶇殑鏁版嵁緇撴瀯鏉ヨ繘琛屼笅涓姝ュ鐞嗐傝繖鏍鋒墍甯︽潵鐨勭己鐐規槸錛?/p>

1銆?鍗曚釜榪涚▼鍙洃瑙嗙殑fd鏁伴噺琚檺鍒訛紝鍗寵兘鐩戝惉绔彛鐨勫ぇ灝忔湁闄愩?br style="margin: 0px; padding: 0px;" />

      涓鑸潵璇磋繖涓暟鐩拰緋葷粺鍐呭瓨鍏崇郴寰堝ぇ錛屽叿浣撴暟鐩彲浠at /proc/sys/fs/file-max瀵熺湅銆?2浣嶆満榛樿鏄?024涓?4浣嶆満榛樿鏄?048.

2銆?瀵箂ocket榪涜鎵弿鏃舵槸綰挎ф壂鎻忥紝鍗抽噰鐢ㄨ疆璇㈢殑鏂規硶錛屾晥鐜囪緝浣庯細

       褰撳鎺ュ瓧姣旇緝澶氱殑鏃跺欙紝姣忔select()閮借閫氳繃閬嶅巻FD_SETSIZE涓猄ocket鏉ュ畬鎴愯皟搴?涓嶇鍝釜Socket鏄椿璺冪殑,閮介亶鍘嗕竴閬嶃傝繖浼氭氮璐瑰緢澶欳PU鏃墮棿銆傚鏋滆兘緇欏鎺ュ瓧娉ㄥ唽鏌愪釜鍥炶皟鍑芥暟錛屽綋浠栦滑媧昏穬鏃訛紝鑷姩瀹屾垚鐩稿叧鎿嶄綔錛岄偅灝遍伩鍏嶄簡杞錛岃繖姝f槸epoll涓巏queue鍋氱殑銆?/p>

3銆侀渶瑕佺淮鎶や竴涓敤鏉ュ瓨鏀懼ぇ閲廸d鐨勬暟鎹粨鏋勶紝榪欐牱浼氫嬌寰楃敤鎴風┖闂村拰鍐呮牳絀洪棿鍦ㄤ紶閫掕緇撴瀯鏃跺鍒跺紑閿澶?/p>

poll錛?/span>

poll鏈川涓婂拰select娌℃湁鍖哄埆錛屽畠灝嗙敤鎴蜂紶鍏ョ殑鏁扮粍鎷瘋礉鍒板唴鏍哥┖闂達紝鐒跺悗鏌ヨ姣忎釜fd瀵瑰簲鐨勮澶囩姸鎬侊紝濡傛灉璁懼灝辯華鍒欏湪璁懼絳夊緟闃熷垪涓姞鍏ヤ竴欏瑰茍緇х畫閬嶅巻錛屽鏋滈亶鍘嗗畬鎵鏈塮d鍚庢病鏈夊彂鐜板氨緇澶囷紝鍒欐寕璧峰綋鍓嶈繘紼嬶紝鐩村埌璁懼灝辯華鎴栬呬富鍔ㄨ秴鏃訛紝琚敜閱掑悗瀹冨張瑕佸啀嬈¢亶鍘唂d銆傝繖涓繃紼嬬粡鍘嗕簡澶氭鏃犺皳鐨勯亶鍘嗐?/p>

瀹冩病鏈夋渶澶ц繛鎺ユ暟鐨勯檺鍒訛紝鍘熷洜鏄畠鏄熀浜庨摼琛ㄦ潵瀛樺偍鐨勶紝浣嗘槸鍚屾牱鏈変竴涓己鐐癸細

1銆佸ぇ閲忕殑fd鐨勬暟緇勮鏁翠綋澶嶅埗浜庣敤鎴鋒佸拰鍐呮牳鍦板潃絀洪棿涔嬮棿錛岃屼笉綆¤繖鏍風殑澶嶅埗鏄笉鏄湁鎰忎箟銆?nbsp;                                                                                                                                     2銆乸oll榪樻湁涓涓壒鐐規槸“姘村鉤瑙﹀彂”錛屽鏋滄姤鍛婁簡fd鍚庯紝娌℃湁琚鐞嗭紝閭d箞涓嬫poll鏃朵細鍐嶆鎶ュ憡璇d銆?/p>epoll:

epoll鏀寔姘村鉤瑙﹀彂鍜岃竟緙樿Е鍙戯紝鏈澶х殑鐗圭偣鍦ㄤ簬杈圭紭瑙﹀彂錛屽畠鍙憡璇夎繘紼嬪摢浜沠d鍒氬垰鍙樹負灝遍渶鎬侊紝騫朵笖鍙細閫氱煡涓嬈°傝繕鏈変竴涓壒鐐規槸錛宔poll浣跨敤“浜嬩歡”鐨勫氨緇氱煡鏂瑰紡錛岄氳繃epoll_ctl娉ㄥ唽fd錛屼竴鏃﹁fd灝辯華錛屽唴鏍稿氨浼氶噰鐢ㄧ被浼糲allback鐨勫洖璋冩満鍒舵潵嬋媧昏fd錛宔poll_wait渚垮彲浠ユ敹鍒伴氱煡

epoll鐨勪紭鐐癸細

1銆佹病鏈夋渶澶у茍鍙戣繛鎺ョ殑闄愬埗錛?/span>鑳芥墦寮鐨凢D鐨勪笂闄愯繙澶т簬1024錛?G鐨勫唴瀛樹笂鑳界洃鍚害10涓囦釜绔彛錛夛紱
2銆佹晥鐜囨彁鍗?/strong>錛屼笉鏄疆璇㈢殑鏂瑰紡錛屼笉浼氶殢鐫FD鏁扮洰鐨勫鍔犳晥鐜囦笅闄嶃傚彧鏈夋椿璺冨彲鐢ㄧ殑FD鎵嶄細璋冪敤callback鍑芥暟錛?br style="margin: 0px; padding: 0px;" />      鍗矱poll鏈澶х殑浼樼偣灝卞湪浜庡畠鍙浣?#8220;媧昏穬”鐨勮繛鎺ワ紝鑰岃窡榪炴帴鎬繪暟鏃犲叧錛屽洜姝ゅ湪瀹為檯鐨勭綉緇滅幆澧冧腑錛孍poll鐨勬晥鐜囧氨浼氳繙榪滈珮浜巗elect鍜宲oll銆?/span>
3銆?nbsp;鍐呭瓨鎷瘋礉錛屽埄鐢╩map()鏂囦歡鏄犲皠鍐呭瓨鍔犻熶笌鍐呮牳絀洪棿鐨勬秷鎭紶閫掞紱鍗砮poll浣跨敤mmap鍑忓皯澶嶅埗寮閿銆?br style="margin: 0px; padding: 0px;" />
select銆乸oll銆乪poll 鍖哄埆鎬葷粨錛?/span>

1銆佹敮鎸佷竴涓繘紼嬫墍鑳芥墦寮鐨勬渶澶ц繛鎺ユ暟

select

鍗曚釜榪涚▼鎵鑳芥墦寮鐨勬渶澶ц繛鎺ユ暟鏈塅D_SETSIZE瀹忓畾涔夛紝鍏跺ぇ灝忔槸32涓暣鏁扮殑澶у皬錛堝湪32浣嶇殑鏈哄櫒涓婏紝澶у皬灝辨槸32*32錛屽悓鐞?4浣嶆満鍣ㄤ笂FD_SETSIZE涓?2*64錛夛紝褰撶劧鎴戜滑鍙互瀵硅繘琛屼慨鏀癸紝鐒跺悗閲嶆柊緙栬瘧鍐呮牳錛屼絾鏄ц兘鍙兘浼氬彈鍒板獎鍝嶏紝榪欓渶瑕佽繘涓姝ョ殑嫻嬭瘯銆?/p>

poll

poll鏈川涓婂拰select娌℃湁鍖哄埆錛屼絾鏄畠娌℃湁鏈澶ц繛鎺ユ暟鐨勯檺鍒訛紝鍘熷洜鏄畠鏄熀浜庨摼琛ㄦ潵瀛樺偍鐨?/p>

epoll

铏界劧榪炴帴鏁版湁涓婇檺錛屼絾鏄緢澶э紝1G鍐呭瓨鐨勬満鍣ㄤ笂鍙互鎵撳紑10涓囧乏鍙崇殑榪炴帴錛?G鍐呭瓨鐨勬満鍣ㄥ彲浠ユ墦寮20涓囧乏鍙崇殑榪炴帴

2銆丗D鍓у鍚庡甫鏉ョ殑IO鏁堢巼闂

select

鍥犱負姣忔璋冪敤鏃墮兘浼氬榪炴帴榪涜綰挎ч亶鍘嗭紝鎵浠ラ殢鐫FD鐨勫鍔犱細閫犳垚閬嶅巻閫熷害鎱㈢殑“綰挎т笅闄嶆ц兘闂”銆?/p>

poll

鍚屼笂

epoll

鍥犱負epoll鍐呮牳涓疄鐜版槸鏍規嵁姣忎釜fd涓婄殑callback鍑芥暟鏉ュ疄鐜扮殑錛屽彧鏈夋椿璺冪殑socket鎵嶄細涓誨姩璋冪敤callback錛屾墍浠ュ湪媧昏穬socket杈冨皯鐨勬儏鍐典笅錛屼嬌鐢╡poll娌℃湁鍓嶉潰涓よ呯殑綰挎т笅闄嶇殑鎬ц兘闂錛屼絾鏄墍鏈塻ocket閮藉緢媧昏穬鐨勬儏鍐典笅錛屽彲鑳戒細鏈夋ц兘闂銆?/p>

3銆?娑堟伅浼犻掓柟寮?/p>

select

鍐呮牳闇瑕佸皢娑堟伅浼犻掑埌鐢ㄦ埛絀洪棿錛岄兘闇瑕佸唴鏍告嫹璐濆姩浣?/p>

poll

鍚屼笂

epoll

epoll閫氳繃鍐呮牳鍜岀敤鎴風┖闂村叡浜竴鍧楀唴瀛樻潵瀹炵幇鐨勩?/p>

鎬葷粨錛?/span>

緇間笂錛屽湪閫夋嫨select錛宲oll錛宔poll鏃惰鏍規嵁鍏蜂綋鐨勪嬌鐢ㄥ満鍚堜互鍙婅繖涓夌鏂瑰紡鐨勮嚜韜壒鐐廣?/p>

1銆佽〃闈笂鐪媏poll鐨勬ц兘鏈濂斤紝浣嗘槸鍦ㄨ繛鎺ユ暟灝戝茍涓旇繛鎺ラ兘鍗佸垎媧昏穬鐨勬儏鍐典笅錛宻elect鍜宲oll鐨勬ц兘鍙兘姣攅poll濂斤紝姣曠珶epoll鐨勯氱煡鏈哄埗闇瑕佸緢澶氬嚱鏁板洖璋冦?/p>

2銆?span style="margin: 0px; padding: 0px; color: #000000; background-color: #ffcc00;">select浣庢晥鏄洜涓烘瘡嬈″畠閮介渶瑕佽疆璇€備絾浣庢晥涔熸槸鐩稿鐨勶紝瑙嗘儏鍐佃屽畾錛屼篃鍙氳繃鑹ソ鐨勮璁℃敼鍠?/span>



]]>
windowsSocket緙栫▼瀛︿範錛?錛夛細闈㈠悜榪炴帴鐨凷ocket緙栫▼姝ラhttp://m.shnenglu.com/cxiaojia/archive/2012/06/04/177444.htmlC灝忓姞C灝忓姞Mon, 04 Jun 2012 04:24:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2012/06/04/177444.htmlhttp://m.shnenglu.com/cxiaojia/comments/177444.htmlhttp://m.shnenglu.com/cxiaojia/archive/2012/06/04/177444.html#Feedback0http://m.shnenglu.com/cxiaojia/comments/commentRss/177444.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/177444.html

闈㈠悜榪炴帴鐨?/span>Socket閫氫俊鏄熀浜?/span>TCP鐨勩傜綉緇滀腑鐨勪袱涓繘紼嬩互瀹㈡埛鏈?/span>/鏈嶅姟鍣ㄦā寮忚繘琛岄氫俊

   鏈嶅姟鍣ㄧ▼搴忚鍏堜簬瀹㈡埛鏈虹▼搴忓惎鍔紝姣忎釜姝ラ涓皟鐢ㄧ殑
Socket鍑芥暟濡備笅錛?/span>

錛?/span>1錛夎皟鐢?/span>WSAStartup()鍑芥暟鍔犺澆Windows Sockets鍔ㄦ佸簱錛岀劧鍚庤皟鐢?/span>socket()鍑芥暟鍒涘緩涓涓祦寮忓鎺ュ瓧錛岃繑鍥炲鎺ュ瓧鍙?/span>s銆?/span>

錛?/span>2錛夎皟鐢?/span>bind()鍑芥暟灝嗗鎺ュ瓧s緇戝畾鍒頒竴涓凡鐭ョ殑鍦板潃錛岄氬父涓烘湰鍦?/span>IP鍦板潃銆?/span>

錛?/span>3錛夎皟鐢?/span>listen()鍑芥暟灝嗗鎺ュ瓧s璁劇疆涓轟睛鍚ā寮忥紝鍑嗗濂芥帴鏀舵潵鑷悇涓鎴鋒満鐨勮繛鎺ヨ姹傘?/span>

錛?/span>4錛夎皟鐢?/span>accept()鍑芥暟絳夊緟鎺ュ彈瀹㈡埛绔殑榪炴帴璇鋒眰銆?/span>

錛?/span>5錛夊鏋滄帴鏀跺埌瀹㈡埛绔殑璇鋒眰錛屽垯accept()鍑芥暟榪斿洖錛屽緱鍒版柊鐨勫鎺ュ瓧ns銆?/span>

錛?/span>6錛夎皟鐢?/span>recv()鍑芥暟鎺ユ敹鏉ヨ嚜瀹㈡埛绔殑鏁版嵁錛岃皟鐢?/span>send()鍑芥暟鍚戝鎴風鍙戦佹暟鎹?/span>

錛?/span>7錛変笌瀹㈡埛绔殑閫氫俊緇撴潫鍚庯紝鏈嶅姟鍣ㄧ▼搴忓彲浠ヨ皟鐢?/span>shutdown()鍑芥暟閫氱煡瀵規柟涓嶅啀鍙戦佹垨鎺ユ敹鏁版嵁錛屼篃鍙互鐢卞鎴風紼嬪簭鏂紑榪炴帴銆傛柇寮榪炴帴鍚庯紝鏈嶅姟鍣ㄨ繘紼嬭皟鐢?/span>closesocket()鍑芥暟鍏抽棴濂楁帴瀛?/span>ns銆傛鍚庢湇鍔″櫒紼嬪簭榪斿洖絎?/span>4姝ワ紝緇х畫絳夊緟瀹㈡埛绔繘紼嬬殑榪炴帴銆?/span>

錛?/span>8錛夊鏋滆閫鍑烘湇鍔″櫒紼嬪簭錛屽垯璋冪敤closesocket()鍑芥暟鍏抽棴鏈鍒濈殑濂楁帴瀛?/span>s銆?/span>

瀹㈡埛绔▼搴忓湪姣忎竴姝ラ涓嬌鐢ㄧ殑鍑芥暟濡備笅錛?/span>

錛?/span>1錛夎皟鐢?/span>WSAStartup()鍑芥暟鍔犺澆Windows Sockets鍔ㄦ佸簱錛岀劧鍚庤皟鐢?/span>socket()鍑芥暟鍒涘緩涓涓祦寮忓鎺ュ瓧錛岃繑鍥炲鎺ュ瓧鍙?/span>s銆?/span>

錛?/span>2錛夎皟鐢?/span>connect()鍑芥暟灝嗗鎺ュ瓧s榪炴帴鍒版湇鍔″櫒銆?/span>

錛?/span>3錛夎皟鐢?/span>send()鍑芥暟鍚戞湇鍔″櫒鍙戦佹暟鎹紝璋冪敤recv()鍑芥暟鎺ユ敹鏉ヨ嚜鏈嶅姟鍣ㄧ殑鏁版嵁銆?/span>

錛?/span>4錛変笌鏈嶅姟鍣ㄧ殑閫氫俊緇撴潫鍚庯紝瀹㈡埛绔▼搴忓彲浠ヨ皟鐢?/span>shutdown()鍑芥暟閫氱煡瀵規柟涓嶅啀鍙戦佹垨鎺ユ敹鏁版嵁錛屼篃鍙互鐢辨湇鍔″櫒紼嬪簭鏂紑榪炴帴銆傛柇寮榪炴帴鍚庯紝瀹㈡埛绔繘紼嬭皟鐢?/span>closesocket()鍑芥暟鍏抽棴濂楁帴瀛椼?/span>

 



]]>
windowsSocket緙栫▼瀛︿範錛?錛夛細涓涓畝鍗曠殑Socket紼嬪簭http://m.shnenglu.com/cxiaojia/archive/2012/05/21/175548.htmlC灝忓姞C灝忓姞Mon, 21 May 2012 01:14:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2012/05/21/175548.htmlhttp://m.shnenglu.com/cxiaojia/comments/175548.htmlhttp://m.shnenglu.com/cxiaojia/archive/2012/05/21/175548.html#Feedback1http://m.shnenglu.com/cxiaojia/comments/commentRss/175548.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/175548.html

閫氳繃涓涓帶鍒跺彴搴旂敤紼嬪簭瀹炰緥鏉ユ紨紺哄垵濮嬪寲Windows Sockets騫惰緭鍑哄緱鍒扮殑鐗堟湰淇℃伅銆?br />

#include<iostream>
#include<winsock2.h>//浣跨敤Winsock 2.2 鐗堟湰
#pragma comment (lib,"ws2_32.lib")
#include<stdlib.h>
using namespace std;

int main()
{
    
    WSADATA wsadata;//WSADATA緇撴瀯浣撲腑涓昏鍖呭惈浜嗙郴緇熸墍鏀寔鐨刉insock鐗堟湰淇℃伅


    if( WSAStartup( MAKEWORD(2,2),&wsadata )!=0 )//鍒濆鍖朩insock 2.2
    {
        cout<<"WSAStartup鏃犳硶鍒濆鍖栵紒"<<endl;
        return 0;
    }
    //浣跨敤Winsock瀹炵幇緗戠粶閫氫俊
    
//鏄劇ずwsadata涓殑鏁版嵁
    printf("Version: %d.%d\n",LOBYTE(wsadata.wVersion),HIBYTE(wsadata.wVersion));//娉ㄩ噴1
    printf("High Version: %d.%d\n", LOBYTE(wsadata.wHighVersion),HIBYTE(wsadata.wHighVersion) );//娉ㄩ噴2
    printf("Description: %s\n",wsadata.szDescription );//娉ㄩ噴3
    printf("System Status: %s\n",wsadata.szSystemStatus );//娉ㄩ噴4
    
//鏈鍚庡簲璇ュ仛鐨勬竻鐞嗗伐浣?/span>
    if(WSACleanup()==SOCKET_ERROR)
        printf("WSACleanup鍑洪敊\n");

    system("pause");

    return 0;
}



娉ㄩ噴1錛?/p>

         瀛楁wVersion錛歐indows Sockets DLL鏈熸湜璋冪敤鑰呬嬌鐢ㄧ殑Windows Sockets瑙勮寖鐨勭増鏈紝涓篧ORD綾誨瀷銆傞珮浣嶅瓧鑺備腑瀛樺偍鍓増鏈彿錛屽湴浣嶅瓧鑺備腑瀛樺偍涓葷増鏈彿銆傝皟鐢↙OBYTE()鍑芥暟鍙互榪斿洖WORD綾誨瀷鏁版嵁鐨勫湴浣嶅瓧鑺傦紝浠庤岃幏鍙栦富鐗堟湰鍙鳳紱璋冪敤HIBYTE()鍑芥暟鍙互榪斿洖WORD綾誨瀷鏁版嵁鐨勯珮浣嶅瓧鑺傦紝浠庤岃幏鍙栧壇鐗堟湰鍙楓?/p>

娉ㄩ噴2錛?/p>

瀛楁wHighVersion錛歐indows Sockets DLL 鍙互鏀寔鐨刉indows Sockets 瑙勮寖鐨勬渶楂樼増鏈?/p>

娉ㄩ噴3錛?/p>

         瀛楁szDescription錛氫互null緇撳熬鐨凙SCLL瀛楃涓層俉indows Sockets DLL灝嗗Windows Sockets瀹炵幇鐨勬弿榪板鍒跺埌璇ュ瓧絎︿覆涓紝鏈澶氬彲浠ュ寘鍚?56涓瓧絎︺?/p>

娉ㄩ噴4錛?/p>

         瀛楁szSystemStatus錛氫互null緇撳熬鐨凙SCLL瀛楃涓詫紝Windows Sockets DLL灝嗘湁鍏崇姸鎬佹垨閰嶇疆淇℃伅澶嶅埗鍒拌瀛楃涓蹭腑銆?/p>

 

鍏朵粬瀛楁鍙婂叾鍚箟錛?/p>

         瀛楁iMaxSockets錛氬崟涓繘紼嬪彲浠ユ墦寮鐨勬渶澶ocket鏁伴噺銆俉indows Sockets鍙互鎻愪緵涓涓叏灞鐨凷ocket錛屼負姣忎釜榪涚▼鍒嗛厤Socket璧勬簮銆傜▼搴忓憳鍙互浣跨敤璇ユ暟瀛椾綔涓篧indows Sockets鏄惁鍙互琚簲鐢ㄧ▼搴忎嬌鐢ㄧ殑鍘熷渚濇嵁銆?/p>

         瀛楁iMaxUdpDg錛歐indows Sockets搴旂敤紼嬪簭鑳藉鍙戦佹垨鎺ュ彈鐨勬渶澶DP鏁版嵁鍖呭ぇ灝忥紝鍗曚綅涓哄瓧鑺傘傚鏋滃疄鐜版柟寮忔病鏈夐檺鍒訛紝鍒檌MaxUdpDg絳変簬0銆?/p>

         瀛楁lpVendorInfo錛氭寚鍚戦攢鍞晢鏁版嵁緇撴瀯鐨勬寚閽堛?/p>






]]>
windowsSocket緙栫▼瀛︿範錛?錛夛細Socket綆浠嬪拰搴旂敤紼嬪簭妗嗘灦http://m.shnenglu.com/cxiaojia/archive/2012/05/20/175432.htmlC灝忓姞C灝忓姞Sun, 20 May 2012 02:17:00 GMThttp://m.shnenglu.com/cxiaojia/archive/2012/05/20/175432.htmlhttp://m.shnenglu.com/cxiaojia/comments/175432.htmlhttp://m.shnenglu.com/cxiaojia/archive/2012/05/20/175432.html#Feedback2http://m.shnenglu.com/cxiaojia/comments/commentRss/175432.htmlhttp://m.shnenglu.com/cxiaojia/services/trackbacks/175432.html

涓銆?/span>Socket綆鍗曚粙緇?/span>

Socket鐨勪腑鏂囩炕璇戞槸濂楁帴瀛楋紝瀹冩槸TCP/IP緗戠粶鐜涓嬪簲鐢ㄧ▼搴忎笌搴曞眰閫氫俊椹卞姩紼嬪簭涔嬮棿榪愯鐨勫紑鍙戞帴鍙o紝瀹冨彲浠ュ皢搴旂敤紼嬪簭涓庡叿浣撶殑TCP/IP闅旂寮鏉ワ紝浣垮緱搴旂敤紼嬪簭涓嶉渶瑕佷簡瑙?/span>TCP/IP鐨勫叿浣撶粏鑺傦紝灝辮兘澶熷疄鐜版暟鎹紶杈撱?/span>

鍏充簬Socket闇瑕佷簡瑙g殑榪樻湁寰堝錛屾垜灝嗗湪闅忓悗鐨勭珷鑺傞噷闄嗙畫鍐欎笂銆?/span>

浜屻?/span>Socket搴旂敤紼嬪簭妗嗘灦

      榪欓噷鍏堝0鏄庝竴涓嬶紝鎴戠敤鐨勬槸32浣?/span>win7緋葷粺錛?/span>vs2010緙栬瘧鍣ㄣ?/span>

棣栧厛鏂板緩涓涓病鏈夐緙栬瘧澶寸殑Win32鎺у埗鍙板簲鐢ㄧ▼搴忋?/span>

搴旂敤紼嬪簭妗嗘灦濡備笅錛?br />

#include<iostream>
#include<winsock2.h>//娉ㄩ噴1
#pragma comment (lib,"ws2_32.lib")//娉ㄩ噴1
#include<stdlib.h>
using namespace std;

int main()
{
    
    WSADATA wsadata;//娉ㄩ噴2


    if( WSAStartup( MAKEWORD(2,2),&wsadata )!=0 )//娉ㄩ噴3
    {
        printf("WSAStartup鏃犳硶鍒濆鍖栵紒\n");
        return 0;
    }
    //浣跨敤Winsock瀹炵幇緗戠粶閫氫俊
    
//
    
//鏈鍚庡簲璇ュ仛鐨勬竻鐞嗗伐浣?/span>
    if(WSACleanup()==SOCKET_ERROR)//娉ㄩ噴4
        printf("WSACleanup鍑洪敊\n");

    system("pause");

    return 0;
}

娉ㄩ噴1錛?/p>

鎴戜滑鍦╲s涓竴鑸嬌鐢╓insock2瀹炵幇緗戠粶閫氫俊鍔熻兘錛岄渶瑕佸紩榪涘ご鏂囦歡winsock2.h鍜屽簱鏂囦歡ws2_32.lib銆?/p>

娉ㄩ噴2錛?/p>

WSADATA緇撴瀯浣撲腑涓昏鍖呭惈浜嗙郴緇熸墍鏀寔鐨刉insock鐗堟湰淇℃伅銆?/p>

娉ㄩ噴3“

         WSAStartup()鍑芥暟鐢ㄤ簬鍒濆鍖朩indows Sockets錛屽茍榪斿洖WSADATA緇撴瀯浣撱傚彧鏈夎皟鐢╓SAStartup()鍑芥暟鍚庯紝搴旂敤紼嬪簭鎵嶈兘璋冪敤鍏朵粬Windows Sockets API鍑芥暟錛屽疄鐜扮綉緇滈氫俊銆?/p>

         絎竴涓弬鏁版槸鐗堟湰鍙鳳紝絎簩涓弬鏁扮敤浜庢帴鏀剁増鏈俊鎭?/p>

         濡傛灉鍑芥暟鎵ц鎴愬姛鍒欎細榪斿洖0銆?/p>

娉ㄩ噴4錛?/p>

         鏈鍚庡簲璇ュ仛鐨勪竴浜涙竻鐞嗗伐浣溿?/p>



 



]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲精品一区二区三区樱花 | 国内精品美女av在线播放| 欧美波霸影院| 欧美另类变人与禽xxxxx| 欧美黄色视屏| 欧美另类在线观看| 欧美日韩网址| 国产精品日韩电影| 国内精品一区二区三区| 亚洲国产精品久久91精品| 亚洲精品看片| 性色av一区二区三区在线观看| 国产欧美一区二区三区久久 | 日韩一区二区电影网| 一区二区成人精品| 一区二区三区视频在线观看| 国产综合精品一区| 欧美在线一二三四区| 亚洲免费视频成人| 久久人人97超碰精品888| 欧美成人精品在线观看| 亚洲福利国产精品| 亚洲国产第一页| 亚洲女优在线| 欧美国产大片| 国产综合色精品一区二区三区| 最近中文字幕日韩精品 | 可以看av的网站久久看| 欧美日韩亚洲精品内裤| 国产综合亚洲精品一区二| 亚洲免费激情| 久久人人看视频| 宅男在线国产精品| 欧美日韩综合另类| 在线观看福利一区| 久久福利电影| 国产精品99久久久久久白浆小说 | 午夜精品亚洲一区二区三区嫩草| 久久久综合免费视频| 日韩一级精品视频在线观看| 久久视频一区| 国产日韩欧美电影在线观看| 99在线精品视频在线观看| 美乳少妇欧美精品| 久久gogo国模裸体人体| 午夜精品久久久久久久| 欧美人妖在线观看| 亚洲激情另类| 欧美成人精品一区二区| 久久国产综合精品| 国产午夜精品一区二区三区欧美| 久久精品视频在线免费观看| 中文网丁香综合网| 欧美激情综合色| 91久久精品www人人做人人爽| 久久精品亚洲一区二区| 亚洲一区综合| 国产精品午夜在线| 欧美一区二区女人| 亚洲欧美综合一区| 国产综合第一页| 免费观看日韩av| 麻豆精品一区二区综合av| 尤物在线精品| 亚洲大片精品永久免费| 亚洲精品中文字幕有码专区| 亚洲免费在线观看| 欧美日韩亚洲成人| 午夜伦理片一区| 精品88久久久久88久久久| 欧美专区在线| 午夜精品亚洲| 亚洲国产精品一区二区尤物区| 久久九九精品| 久久久久久久尹人综合网亚洲 | 日韩亚洲欧美一区二区三区| 欧美激情一区二区三区蜜桃视频 | 免费看成人av| 在线一区观看| 亚洲欧美综合另类中字| 亚洲国产精品久久人人爱蜜臀 | 欧美日韩国产123| 亚洲私人影院在线观看| 亚洲制服av| 亚洲国产成人在线| 亚洲精品国产精品国自产观看浪潮| 亚洲国内精品在线| 欧美国产亚洲视频| 国产精品av免费在线观看| 欧美在线日韩在线| 免费在线亚洲| 欧美在线亚洲在线| 欧美激情偷拍| 久久阴道视频| 国产精品ⅴa在线观看h| 免费观看久久久4p| 国产精品久久久久国产a级| 久久综合九色综合欧美就去吻| 欧美黄色小视频| 久久久免费精品视频| 欧美日韩一区二区在线| 久久免费视频在线观看| 一本久久综合亚洲鲁鲁五月天| 国产视频欧美视频| 亚洲毛片在线看| 伊人久久婷婷色综合98网| 一区二区三区 在线观看视| 影音先锋亚洲一区| 午夜视频在线观看一区二区| 亚洲国产精品视频一区| 欧美日韩亚洲国产一区| 欧美激情四色| 国产字幕视频一区二区| 亚洲在线播放| 亚洲午夜久久久| 欧美激情亚洲| 蘑菇福利视频一区播放| 国产精品乱码一区二区三区| 久久久久久久久久久久久9999 | 一区二区在线不卡| 亚洲一区免费网站| 亚洲毛片一区| 欧美日韩免费高清一区色橹橹| 欧美激情一区二区三区不卡| 久久久久久久尹人综合网亚洲| 欧美日韩激情小视频| 免费久久99精品国产自在现线| 国产日韩欧美另类| 亚洲综合清纯丝袜自拍| 亚洲一区二区三区中文字幕| 久久全国免费视频| 一区二区日韩免费看| 在线视频精品| 欧美午夜激情小视频| 一区二区毛片| 亚洲欧美日韩国产精品| 国产精品日日摸夜夜摸av| 亚洲欧美精品suv| 久久se精品一区二区| 国产午夜精品全部视频播放| 欧美中日韩免费视频| 六十路精品视频| 亚洲大胆美女视频| 另类综合日韩欧美亚洲| 欧美激情中文字幕一区二区| 亚洲精品看片| 国产精品久久久久av免费| 亚洲欧美日韩国产一区二区| 午夜在线观看免费一区| 亚洲国产日韩精品| 亚洲精品中文字幕女同| 欧美午夜视频网站| 亚洲欧美日韩一区二区在线| 久久精品99国产精品| 一色屋精品视频在线观看网站| 久久久国产亚洲精品| 欧美在线播放一区二区| 欧美不卡在线视频| 在线亚洲一区观看| 国产欧美一区二区三区国产幕精品| 欧美在线观看天堂一区二区三区| 久久这里只有精品视频首页| 亚洲日本成人女熟在线观看| 欧美午夜片在线观看| 欧美在线视频观看免费网站| 欧美电影免费观看大全| 在线亚洲高清视频| 国内精品久久久久影院优| 另类综合日韩欧美亚洲| 99精品视频免费观看| 久久久久久一区二区| 亚洲免费播放| 国产日产欧美精品| 亚洲免费精彩视频| 久久精品夜夜夜夜久久| 亚洲免费不卡| 国内精品久久久久影院薰衣草| 欧美黑人国产人伦爽爽爽| 亚洲自拍高清| 亚洲国内精品在线| 久久丁香综合五月国产三级网站| 亚洲免费电影在线观看| 在线观看91久久久久久| 国产精品第三页| 久久成人综合视频| 夜夜爽av福利精品导航 | 亚洲国产精品毛片| 久久经典综合| 亚洲私人影院| 韩国精品在线观看| 免费欧美视频| 影音先锋日韩精品| 国产精品视频观看| 欧美日韩国产成人精品| 久久久久久久久一区二区| 亚洲午夜一区二区三区| 91久久在线播放| 久色成人在线| 国产日韩在线播放| 国产精品成人在线|