ÇëÑ¡Ôñ ½øÈëÊÖ»ú°æ | ¼ÌÐø·ÃÎʵçÄÔ°æ

ĬÈÏ
´òÉÍ ·¢±íÆÀÂÛ 10
Ï뿪·¢IM£ºÂò³ÉÆ·Å¿ӣ¿×âµÚ3·½Å¹ó£¿ÕÒ¿ªÔ´×ÔÒÑߣ£¿¾¡Á¿±ð×ßÍä·ÁË... ÕÒÕ¾³¤¸øµã½¨Òé
´Ó¸ùÉÏÀí½â¸ßÐÔÄÜ¡¢¸ß²¢·¢(Èý)£ºÉîÈë²Ù×÷ϵͳ£¬³¹µ×Àí½âI/O¶à·¸´ÓÃ
΢ÐÅɨһɨ¹Ø×¢£¡

±¾ÎÄÔ­Ìâ¡°ÖÕÓÚÃ÷°×ÁË£¬Ò»Îij¹µ×Àí½âI/O¶à·¸´Óá±£¬±¾´ÎÊÕ¼ÒÑÕ÷µÃ×÷ÕßͬÒâ£¬×ªÔØÇëÁªÏµ×÷Õߣ¨¼û¡°2¡¢±¾ÎÄ×÷Õß¡±Ò»½Ú£©¡£¼´Ê±Í¨Ñ¶ÍøÊÕ¼ʱÓÐÉÙÐí¸Ä¶¯¡£


1¡¢ÏµÁÐÎÄÕÂÒýÑÔ


1.1ÎÄÕÂÄ¿µÄ


×÷Ϊ¼´Ê±Í¨Ñ¶¼¼ÊõµÄ¿ª·¢ÕßÀ´Ëµ£¬¸ßÐÔÄÜ¡¢¸ß²¢·¢Ïà¹ØµÄ¼¼Êõ¸ÅÄîÔç¾ÍÁËÈ»ÓëÐØ£¬Ê²Ã´Ï̳߳ء¢Á㿽±´¡¢¶à·¸´Óá¢Ê¼þÇý¶¯¡¢epollµÈµÈÃû´ÊÐÅÊÖÄéÀ´£¬ÓÖ»òÐíÄã¶Ô¾ßÓÐÕâЩ¼¼ÊõÌØÕ÷µÄ¼¼Êõ¿ò¼Ü±ÈÈ磺JavaµÄNetty¡¢PhpµÄworkman¡¢GoµÄgnetµÈÊìÁ·ÕÆÎÕ¡£µ«ÕæÕýµ½ÁËÃæÊÓ»òÕß¼¼Êõʵ¼ù¹ý³ÌÖÐÓöµ½ÎÞ·¨ÊÍ»³µÄÒÉ»óʱ£¬·½Öª×ÔÒÑËùÕÆÎյIJ»¹ýÊÇÆ¤Ã«¡£

·µè±¹éÕæ¡¢»Ø¹é±¾ÖÊ£¬ÕâЩ¼¼ÊõÌØÕ÷±³ºóµÄµ×²ãÔ­Àíµ½µ×ÊÇʲô£¿ÈçºÎÄÜͨË×Ò×¶®¡¢ºÁ²»·ÑÁ¦ÕæÕý͸³¹Àí½âÕâЩ¼¼Êõ±³ºóµÄÔ­Àí£¬ÕýÊÇ¡¶´Ó¸ùÉÏÀí½â¸ßÐÔÄÜ¡¢¸ß²¢·¢¡·ÏµÁÐÎÄÕÂËùÒª·ÖÏíµÄ¡£

1.2ÎÄÕÂÔ´Æð


ÎÒ£¨Jack Jiang£©Îª¼´Ê±Í¨Ñ¶ÍøÕûÀíÁËÏ൱¶àÓйØIM¡¢ÏûÏ¢ÍÆË͵ȼ´Ê±Í¨Ñ¶¼¼ÊõÏà¹ØµÄ×ÊÔ´ºÍÎÄÕ£¬´Ó×ʼµÄ¿ªÔ´IM¿ò¼ÜMobileIMSDK£¬µ½ÍøÂç±à³Ì¾­µä¾ÞÖø¡¶TCP/IPÏê½â¡·µÄÔÚÏß°æ±¾£¬ÔÙµ½IM¿ª·¢¸ÙÁìÐÔÎÄÕ¡¶ÐÂÊÖÈëÃÅһƪ¾Í¹»£º´ÓÁ㿪·¢Òƶ¯¶ËIM¡·£¬ÒÔ¼°ÍøÂç±à³ÌÓÉdzµ½ÉîµÄ¡¶ÍøÂç±à³ÌÀÁÈËÈëÃÅ¡·¡¢¡¶ÄÔ²ÐÊ½ÍøÂç±à³ÌÈëÃÅ¡·¡¢¡¶¸ßÐÔÄÜÍøÂç±à³Ì¡·¡¢¡¶²»ÎªÈËÖªµÄÍøÂç±à³Ì¡·ÏµÁÐÎÄÕ¡£

Ô½Íù֪ʶµÄÉî´¦×ߣ¬Ô½¾õµÃ¶Ô¼´Ê±Í¨Ñ¶¼¼ÊõÁ˽âµÄÌ«ÉÙ¡£ÓÚÊǺóÀ´£¬ÎªÁËÈÿª·¢ÕßßüºÃµØ´Ó»ù´¡µçÐż¼ÊõµÄ½Ç¶ÈÀí½âÍøÂ磨ÓÈÆäÒÆ¶¯ÍøÂç£©ÌØÐÔ£¬ÎÒ¿çרҵÊÕ¼¯ÕûÀíÁË¡¶IM¿ª·¢ÕßµÄÁã»ù´¡Í¨Ðż¼ÊõÈëÃÅ¡·ÏµÁи߽×ÎÄÕ¡£ÕâϵÁÐÎÄÕÂÒÑÈ»ÊÇÆÕͨ¼´Ê±Í¨Ñ¶¿ª·¢ÕßµÄÍøÂçͨÐż¼Êõ֪ʶ±ß½ç£¬¼ÓÉÏ֮ǰÕâÐ©ÍøÂç±à³Ì×ÊÁÏ£¬½â¾öÍøÂçͨÐÅ·½ÃæµÄ֪ʶäµã»ù±¾¹»ÓÃÁË¡£

¶ÔÓÚ¼´Ê±Í¨Ñ¶IMÕâÖÖϵͳµÄ¿ª·¢À´Ëµ£¬ÍøÂçͨÐÅ֪ʶȷʵ·Ç³£ÖØÒª£¬µ«»Ø¹éµ½¼¼Êõ±¾ÖÊ£¬ÊµÏÖÍøÂçͨÐű¾ÉíµÄÕâЩ¼¼ÊõÌØÕ÷£º°üÀ¨ÉÏÃæÌáµ½µÄÏ̳߳ء¢Á㿽±´¡¢¶à·¸´Óá¢Ê¼þÇý¶¯µÈµÈ£¬ËüÃǵı¾ÖÊÊÇʲô£¿µ×²ãÔ­ÀíÓÖÊÇÔõÑù£¿Õâ¾ÍÊÇÕûÀí±¾ÏµÁÐÎÄÕµÄÄ¿µÄ£¬Ï£Íû¶ÔÄãÓÐÓá£

1.3ÎÄÕÂĿ¼



1.4±¾Æª¸ÅÊö


½ÓÉÏÆª¡¶ÉîÈë²Ù×÷ϵͳ£¬Àí½âI/OÓëÁ㿽±´¼¼Êõ¡·£¬±¾ÆªÊǸßÐÔÄÜ¡¢¸ß²¢·¢ÏµÁеĵÚ3ƪÎÄÕ£¬ÉÏÆªÀïÎÒÃǽ²µ½ÁËI/O¼¼Êõ£¬±¾Æª½«ÒÔ¸ü¾ßÏóµÄÎļþÕâ¸ö»°ÌâÈëÊÖ£¬´øÄãÒ»²½²½Àí½â¸ßÐÔÄÜ¡¢¸ß²¢·¢·þÎñ¶Ë±à³ÌʱÎÞ·¨»Ø±ÜµÄI/O¶à·¸´Óü°Ïà¹Ø¼¼Êõ¡£

±¾ÎÄÒÑͬ²½·¢²¼ÓÚ¡°¼´Ê±Í¨Ñ¶¼¼ÊõȦ¡±¹«Öںţ¬»¶Ó­¹Ø×¢¡£¹«ÖÚºÅÉϵÄÁ´½ÓÊÇ£ºµã´Ë½øÈë¡£

2¡¢±¾ÎÄ×÷Õß


Ó¦×÷ÕßÒªÇ󣬲»Ìá¹©ÕæÃû£¬Ò²²»Ìṩ¸öÈËÕÕÆ¬¡£

±¾ÎÄ×÷ÕßÖ÷Òª¼¼Êõ·½ÏòΪ»¥ÁªÍøºó¶Ë¡¢¸ß²¢·¢¸ßÐÔÄÜ·þÎñÆ÷¡¢¼ìË÷ÒýÇæ¼¼Êõ£¬ÍøÃûÊÇ¡°ÂëÅ©µÄ»ÄµºÇóÉú¡±£¬¹«Öںš°ÂëÅ©µÄ»ÄµºÇóÉú¡±¡£¸Ðл×÷ÕßµÄÎÞ˽·ÖÏí¡£

3¡¢Ê²Ã´ÊÇÎļþ£¿


ÔÚÕýʽչ¿ª±¾ÎĵÄÄÚÈÝ֮ǰ£¬ÎÒÃÇÐèÒªÏÈԤϰһÏÂÎļþÒÔ¼°ÎļþÃèÊö·ûµÄ¸ÅÄî¡£

³ÌÐòԱʹÓÃI/O×îÖÕ¶¼ÌÓ²»¹ýÎļþÕâ¸ö¸ÅÄî¡£

ÔÚLinuxÊÀ½çÖÐÎļþÊÇÒ»¸öºÜ¼òµ¥µÄ¸ÅÄ×÷Ϊ³ÌÐòÔ±ÎÒÃÇÖ»ÐèÒª½«ÆäÀí½âΪһ¸öN byteµÄÐòÁоͿÉÒÔÁË£º

b1, b2, b3, b4, ....... bN


ʵ¼ÊÉÏËùÓеÄI/OÉ豸¶¼±»³éÏóΪÁËÎļþÕâ¸ö¸ÅÄһÇнÔÎļþ£¨Everything is File£©£¬´ÅÅÌ¡¢ÍøÂçÊý¾Ý¡¢ÖÕ¶Ë£¬ÉõÖÁ½ø³Ì¼äͨÐŹ¤¾ß¹ÜµÀpipeµÈ¶¼±»µ±×öÎļþ¶Ô´ý¡£

1.png

ËùÓеÄI/O²Ù×÷Ò²¶¼¿ÉÒÔͨ¹ýÎļþ¶ÁдÀ´ÊµÏÖ£¬ÕâÒ»·Ç³£ÓÅÑŵijéÏó¿ÉÒÔÈóÌÐòԱʹÓÃÒ»Ì×½Ó¿Ú¾ÍÄܶÔËùÓÐÍâÉèI/O²Ù×÷¡£

³£ÓõÄI/O²Ù×÷½Ó¿ÚÒ»°ãÓÐÒÔϼ¸Àࣺ

  • 1£©´ò¿ªÎļþ£¬open£»
  • 2£©¸Ä±ä¶ÁдλÖã¬seek£»
  • 3£©Îļþ¶Áд£¬read¡¢write£»
  • 4£©¹Ø±ÕÎļþ£¬close¡£

³ÌÐòԱͨ¹ýÕ⼸¸ö½Ó¿Ú¼¸ºõ¿ÉÒÔʵÏÖËùÓÐI/O²Ù×÷£¬Õâ¾ÍÊÇÎļþÕâ¸ö¸ÅÄîµÄÇ¿´óÖ®´¦¡£

4¡¢Ê²Ã´ÊÇÎļþÃèÊö·û£¿


ÔÚÉÏһƪ¡¶ÉîÈë²Ù×÷ϵͳ£¬Àí½âI/OÓëÁ㿽±´¼¼Êõ¡·ÖÐÎÒÃǽ²µ½£ºÒªÏë½øÐÐI/O¶Á²Ù×÷£¬Ïñ´ÅÅÌÊý¾Ý£¬ÎÒÃÇÐèÒªÖ¸¶¨Ò»¸öbuffÓÃÀ´×°ÈëÊý¾Ý¡£

Ò»°ã¶¼ÊÇÕâÑùдµÄ£º

read(buff);


µ«ÊÇÕâÀïÎÒÃǺöÂÔÁËÒ»¸ö¹Ø¼üÎÊÌ⣺ÄǾÍÊÇ£¬ËäÈ»ÎÒÃÇÖ¸¶¨ÁËÍùÄÄÀïдÊý¾Ý£¬µ«ÊÇÎÒÃǸôÓÄÄÀï¶ÁÊý¾ÝÄØ£¿

´ÓÉÏÒ»½ÚÖÐÎÒÃÇÖªµÀ£¬Í¨¹ýÎļþÕâ¸ö¸ÅÄîÎÒÃÇÄÜʵÏÖ¼¸ºõËùÓÐI/O²Ù×÷£¬Òò´ËÕâÀïÉÙµÄÒ»¸öÖ÷½Ç¾ÍÊÇÎļþ¡£

ÄÇôÎÒÃÇÒ»°ã¶¼ÔõÑùʹÓÃÎļþÄØ£¿

¾Ù¸öÀý×Ó£ºÈç¹ûÖÜÄ©ÄãÈ¥±È½Ï»ðµÄ²ÍÌü³Ô·¹Ó¦¸Ã»áÓÐÌå»á£¬Ò»°ãÖÜÄ©ÈËÆø¸ßµÄ²ÍÌü¶¼»áÅŶӣ¬È»ºó·þÎñÔ±»á¸øÄãÒ»¸öÅŶÓÐòºÅ£¬Í¨¹ýÕâ¸öÐòºÅ·þÎñÔ±¾ÍÄÜÕÒµ½Ä㣬ÕâÀïµÄºÃ´¦¾ÍÊÇ·þÎñÔ±ÎÞÐè¼ÇסÄãÊÇË­¡¢ÄãµÄÃû×ÖÊÇʲô¡¢À´×ÔÄÄÀϲºÃÊÇʲô¡¢ÊDz»ÊDZ£»¤»·¾³°®»¤Ð¡¶¯ÎïµÈµÈ£¬ÕâÀïµÄ¹Ø¼üµã¾ÍÊÇ£º·þÎñÔ±¶ÔÄãÒ»ÎÞËùÖª£¬µ«ÒÀÈ»¿ÉÒÔͨ¹ýÒ»¸öºÅÂë¾ÍÄÜÕÒµ½Äã¡£

ͬÑùµÄ£ºÔÚLinuxÊÀ½çÒªÏëʹÓÃÎļþ£¬ÎÒÃÇÒ²ÐèÒª½èÖúÒ»¸öºÅÂ룬¸ù¾Ý¡°Åª²»¶®Ô­Ôò¡±£¬Õâ¸öºÅÂë¾Í±»³ÆÎªÁËÎļþÃèÊö·û£¨file descriptors£©£¬ÔÚLinuxÊÀ½çÖ榶¦´óÃû£¬ÆäµÀÀíºÍÉÏÃæÄǸöÅŶӺÅÂëÒ»Ñù¡£

Òò´Ë£ºÎļþÃèÊö½ö½ö¾ÍÊÇÒ»¸öÊý×Ö¶øÒÑ£¬µ«ÊÇͨ¹ýÕâ¸öÊý×ÖÎÒÃÇ¿ÉÒÔ²Ù×÷Ò»¸ö´ò¿ªµÄÎļþ£¬ÕâÒ»µãÒª¼Çס¡£

2.png

ÓÐÁËÎļþÃèÊö·û£¬½ø³Ì¿ÉÒÔ¶ÔÎļþÒ»ÎÞËùÖª£¬±ÈÈçÎļþÔÚ´ÅÅ̵ÄʲôλÖᢼÓÔØµ½ÄÚ´æÖÐÓÖÊÇÔõÑù¹ÜÀíµÄµ