See More

------------------------------- Netty-IOµÄÇø±ð | ------------------------------- # JDK1.4µÄµÄ¶«Î÷ # BIO ºÍ NIOµÄÇø±ð ×èÈû :³ÌÐòÔÚ»ñÈ¡ÍøÂçÊý¾ÝµÄʱºò,Èç¹ûÍøÂçÊý¾Ý´«ÊäÂý,ÄÇô³ÌÐò¾Í»áÒ»Ö±µÈ´ýÏÂÈ¥.Ö±µ½´«ÊäÍê±Ï ·Ç×èÈû :³ÌÐò¿ÉÒÔÖ±½Ó»ñÈ¡ÒѾ­×¼±¸¾ÍÐ÷µÄÊý¾Ý,ÎÞÐèµÈ´ý 'BIOΪͬ²½×èÈû,NIOΪͬ²½·Ç×èÈû,NIO²¢Ã»ÓÐʵÏÖÒì²½',JDK1.7ÒÔºó,Éý¼¶ÁËNIO°ü,Ö§³ÖÒì²½·Ç×èÈûͨÐÅÄ£ÐÍ-NIO2.0(AIO) ͬ²½ºÍÒì²½ :ͬ²½ºÍÒì²½Ò»°ãÊÇÃæÏò²Ù×÷ϵͳÓë³ÌÐò¶ÔÓÚIO²Ù×÷µÄ²ãÃæÉÏÀ´Çø±ðµÄ ͬ²½:³ÌÐòÖ±½Ó²ÎÊýIO¶Áд,²¢ÇÒ³ÌÐò»á×èÈûµ½Ä³·½·¨,Ö±µ½Êý¾Ý×¼±¸¾ÍÐ÷,»òÕß²ÉÓÃÂÖѯµÄ²ßÂÔʵʱ¼ì²éÊý¾ÝµÄ¾ÍÐ÷״̬,Èç¹ûÊý¾Ý×¼±¸¾ÍÐ÷Ôò¶ÁÈ¡Êý¾Ý¡¢ Òì²½:ËùÓеÄIO½»¸ø²Ù×÷ϵͳȥ´¦Àí,Óë³ÌÐòû¹ØÏµ.³ÌÐò²»ÓùØÐĶÁд.²Ù×÷ϵͳÍê³ÉÁËIOºó,»á֪ͨ³ÌÐò,³ÌÐòÖ»ÐèÒªÄÃ×ßÊý¾Ý¾ÍOK ͬ²½ËµµÄÊÇServlet·þÎñÆ÷¶ËµÄÖ´Ðз½Ê½ ×èÈû˵µÄÊǾßÌåµÄ¼¼Êõ,½ÓÊÕÊý¾ÝµÄ·½·¨(IO,NIO) # ×èÈû/·Ç×èÈû * ×èÈû,Òâ˼ÊdzÌÐò,ÊÕÊý¾ÝµÄʱºò.ÊÇÒªÒ»Ö±µÈ×Å.ɶҲ×ö²»ÁË,Ö±µ½Êý¾Ý´«Íê * ·Ç×èÈû,Òâ˼ÊÇ.Óиö»º³åÇø.ÊÕµÄʱºò,ÎÒ²»ÓÃÒ»Ö±µÈ×Å.¿ÉÒÔ×öµãÆäËûÓÐÒâ˼µÄÊÂÇé,»º³åÇøÀïÃæÓÐÊý¾ÝÁË?ÎҾʹ¦ÀíÒ»µã # Òì²½/ͬ²½ * ¸ú²Ù×÷ϵͳÓйØ,Òì²½¾ÍÊÇ.ÊÕÊý¾ÝÕâ»î¶ù²Ù×÷ϵͳ¸øÎÒ¸ÉÁË.ÎÒ²»¹Ü,¾ÍÓÐʱ¼ä¸ãÆäËûµÄ.²Ù×÷ϵͳŪÍêÁË.֪ͨÎÒOK * ͬ²½¾ÍÊÇ,Ö±½ÓÎÒÇ××ÔÉÏ. # NIOÔ­Àí * ʼþµÄÂÖѯ,¶à·¸´Óü¼Êõ(Selectģʽ),ÂÖѯ½»¸øÒ»¸öµ¥¶ÀµÄÏß³ÌÀ´Íê³É.µ±ÊÇÊý¾Ý×¼±¸OKºó֪ͨ¶ÁдÏß³ÌÀ´½øÐжÁд²Ù×÷.ÄÇôÔÚÊý¾Ýδ׼±¸OK֮ǰ,¶ÁдÏ߳̿ÉÒÔÍê³ÉÆäËûµÄÊÂÇé * ´«Í³BIOÖÐ,¶ÁдÏß³ÌÐèÒª×Ô¼ºµÈ×ÅÊý¾Ý×¼±¸OK,½øÐжÁд # Ñ§Ï°ÍøÕ¾ * http://ifeve.com/overview/ * http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html * http://watchmen.cn/portal.php?mod=view&aid=509 * http://www.iteye.com/magazines/132-Java-NIO * http://www.importnew.com/19816.html BIO - ͬ²½×èÈû NIO - ͬ²½·Ç×èÈû(JDK1.4) AIO - Òì²½·Ç×èÈû(JDK1.7) ------------------------------- Netty-NIO | ------------------------------- # NIO ÓÐÈ˽Ð×ö New IO »òÕß Non-block IO (·Ç×èÈû),×îºÃ»¹ÊÇÒÔºóÕßµÄÀí½â±È½ÏÇ¡µ± # ѧϰNIOÐèÒªÃ÷È·¼¸¸ö¸ÅÄî Buffer * »º³åÇø * NIO ÖкËÐĵĸÅÄî,´«Í³ÊÇÖ±½ÓIOÊý¾Ý,ҪôдҪô¶Á.NIOÌṩÁËÒ»¸ö»º³åÇøµÄ¸ÅÄî Channel * ¹ÜµÀ/ͨµÀ Selector * Ñ¡ÔñÆ÷/¶à·¸´ÓÃÆ÷ ------------------------------- Netty-Channel | ------------------------------- # ͨµÀ,¸ú×ÔÀ´Ë®¹ÜµÀÃ»É¶Çø±ð.ÍøÂçÊý¾Ýͨ¹ý Channel ¶ÁÈ¡/дÈë,'Ó봫ͳÁ÷²»Í¬µÄÊÇ,ËüË«ÏòµÄ',¶øÁ÷ҪôÊǶÁÁ÷,ҪôÊÇдÁ÷ # ×îµðµÄÊÇ,Õâ¸öͨµÀ¿ÉÒÔͬʱµÄ½øÐжÁ/д # ×î¹Ø¼üµÄÊÇ,¿ÉÒԺͶà·¸´ÓÃÆ÷½áºÏÆðÀ´,ÓжàÖÖ״̬λ,·½±ã¶à·¸´ÓÃÆ÷ȥʶ±ð. # ÊÂʵÉÏ,ͨµÀ·ÖΪÁ½´óÀà 1,SelectableChannel ÍøÂç¶Áд * DatagramChannel //UDP * SocketChannel //TCP * ServerSocketChannel //·þÎñÆ÷¶Ë¶ÔÏó 2,FileChannel Îļþ²Ù×÷ ------------------------------- Netty-Selector | ------------------------------- # ¶à·¸´ÓÃÆ÷,ËüÊÇNIO±à³ÌµÄ»ù´¡,·Ç³£ÖØÒª.¶à·¸´ÓÃÆ÷,Ìṩ'Ñ¡ÔñÒѾ­¾ÍÐ÷µÄÈÎÎñµÄÄÜÁ¦' # ¼òµ¥Ëµ,Selector »á²»¶ÏµÄÂÖѯ,×¢²áÔÚÆäÉϵÄͨµÀ Channel,Èç¹ûij¸öͨµÀ·¢ÉúÁ˶Áд²Ù×÷.Õâ¸öͨµÀ¾Í´¦ÓÚ¾ÍÐ÷״̬.»á±» Selector ÂÖѯ³öÀ´,È»ºóͨ¹ý SelectionKey ¿ÉÒÔ È¡µÃ¾ÍÐ÷µÄ Channel ¼¯ºÏ,´Ó¶ø½øÐкóÐøµÄ²Ù×÷ # Ò»¸ö¶à·¸´ÓÃÆ÷,¿ÉÒÔ¸ºÔð³ÉǧÉÏÍòµÄ Channel ͨµÀ,ûÓÐÉÏÏÞ.ÕâÒ²ÊÇJDKʹÓà epoll´úÌæÁË´«Í³ SelectʵÏÖ,»ñÈ¡Á¬½Ó¾ä±úûÓÐÏÞÖÆ,Òâζ×ÅÎÒÃÇÖ»ÐèÒªÒ»¸öÏ̸߳ºÔð Selector µÄÂÖѯ.¾Í¿ÉÒÔ½ÓÈë³ÉǧÉÏÍòµÄ¿Í»§¶Ë,Õâ¾ÍÊÇJDK NIO¿âµÄ¾Þ´ó½ø²½ # Selector Ï߳̾ÍÀàËÆÓÚÒ»¸ö¹ÜÀíÕß(Master),¹ÜÀí³ÉǧÍòµÄͨµÀ,È»ºóÂÖѯ³öÄĸöͨµÀÒѾ­×¼±¸ºÃ.֪ͨCPUÖ´ÐÐI/O²Ù×÷ # Selector ģʽ:µ±IOʼþ(¹ÜµÀ)×¢²áµ½Ñ¡ÔñÆ÷ºó,Selector »á·ÖÅä¸øÃ¿¸ö¹ÜµÀÒ»¸ö key Öµ,±êÇ©.Selector ÂÖѯע²áµÄ¹ÜµÀ,µ±¹ÜµÀ¾ÍÐ÷ºó, select¾Í»áʶ±ð,ͨ¹ýkeyÖµÀ´ÕÒµ½¶ÔÓ¦µÄ¹ÜµÀ.½øÐÐÏà¹ØÊý¾Ý´¦Àí²Ù×÷.(дÈë,»òÕß¶Áµ½»º³åÇø) # ÿ¸ö¹ÜµÀ¶¼»á¶ÔÑ¡ÔñÆ÷×¢²á²»Í¬µÄʼþ״̬,ÒÔ±ãÑ¡ÔñÆ÷²éÕÒ SelectionKey.OP_ACCEPT //ÓÃÓÚÌ×½Ó×Ö½ÓÊܲÙ×÷µÄ²Ù×÷¼¯Î»¡£ SelectionKey.OP_CONNECT //ÓÃÓÚÌ×½Ó×ÖÁ¬½Ó²Ù×÷µÄ²Ù×÷¼¯Î»¡£ SelectionKey.OP_READ //ÓÃÓÚ¶ÁÈ¡²Ù×÷µÄ²Ù×÷¼¯Î»¡£ SelectionKey.OP_WRITE //ÓÃÓÚдÈë²Ù×÷µÄ²Ù×÷¼¯Î»¡£ ------------------------------- Netty-×ܽá | ------------------------------- # Buffer * н¨×ÜÊÇÒªÖ´ÐÐ clear(); ±È½ÏºÃ * Èç¹ûÊÇ´Ó Buffer ÖжÁÈ¡Êý¾Ý,ÒªÏȼǵø´Î»,È»ºóÔÙ½øÐжÁÈ¡. * Èç¹ûÊÇ´Ó Buffer ÖжÁÈ¡Êý¾ÝÄÇôҪÓà while(buf.hasRemaining()) Ñ­»·,ÓпÉÄÜÊý¾ÝÒ»´ÎÐÔû¶ÁÈ¡Íê # Channel * Èç¹ûÊǶÁÈ¡ Channel ÖеÄÊý¾Ý,·Ç×èÈûģʽÏÂ,read()·½·¨ÔÚÉÐδ¶ÁÈ¡µ½ÈκÎÊý¾Ýʱ¿ÉÄܾͷµ»ØÁË¡£ËùÒÔÐèÒª¹Ø×¢ËüµÄ int ·µ»ØÖµ