Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
´ÓÈëÃŵ½ÊµÕ½£¬Netty¶àÏß³ÌÆª°¸Àý¼¯½õ
 
 ÒëÕß:  ÀîÁÖ·å   À´Ô´£º InfoQ  »ðÁú¹ûÈí¼þ ·¢²¼ÓÚ 2015-9-24
  4047  次浏览      27
 

Netty°¸Àý¼¯½õϵÁÐÎÄÕ½éÉÜ

1£üNettyµÄÌØµã

NettyÈëÃűȽϼòµ¥£¬Ö÷ÒªÔ­ÒòÓÐÈçϼ¸µã£º

  • NettyµÄAPI·â×°±È½Ï¼òµ¥£¬½«¸´ÔÓµÄÍøÂçͨÐÅͨ¹ýBootStrapµÈ¹¤¾ßÀà×öÁ˶þ´Î·â×°£¬Óû§Ê¹ÓÃÆðÀ´±È½Ï¼òµ¥£»
  • NettyÔ´Âë×Ô´øµÄDemo±È½Ï¶à£¬Í¨¹ýDemo¿ÉÒԺܿìÈëÃÅ£»
  • NettyÉçÇø×ÊÁÏ¡¢Ïà¹ØÑ§Ï°Êé¼®Ò²±È½Ï¶à£¬Ñ§Ï°×ÊÁϱȽϷḻ¡£

µ«ÊǺܶàÈëÃÅÖ®ºóµÄNettyѧϰÕßÓöµ½Á˺ܶàÀ§»ó£¬ÀýÈç²»ÖªµÀÔÚʵ¼ÊÏîÄ¿ÖÐÈçºÎʹÓÃNetty¡¢Óöµ½NettyÎÊÌâÖ®ºóÎÞ´Ó¶¨Î»µÈ£¬ÕâЩÎÊÌâÑÏÖØÖÆÔ¼Á˶ÔNettyµÄÉîÈëÕÆÎÕºÍʵ¼ÊÏîĿӦÓá£

NettyÏà¹ØÎÊÌâ±È½ÏÄѶ¨Î»µÄÖ÷ÒªÔ­ÒòÈçÏ£º

1) NIO±à³Ì×ÔÉíµÄ¸´ÔÓÐÔ£¬Éæ¼°µ½´óÁ¿NIOÀà¿â¡¢Netty×ÔÉí·â×°µÄÀà¿âµÈ£¬µ±ÄãÐèÒª´ò¿ªºÚºÐ¶¨Î»ÎÊÌâʱ£¬±ØÐë¶ÔÕâЩÀà¿âÁËÈçÖ¸ÕÆ£»·ñÔò¼´±ã¶¨Î»µ½ÎÊÌâËùÔÚ£¬Ò²²»ÖªËùÒÔÈ»£¬¸üÎÞ·¨ÐÞ¸´£»

2) Netty¸´ÔӵĶàÏß³ÌÄ£ÐÍ£¬Óû§ÔÚʵ¼ÊʹÓÃNettyʱ£¬»áÉæ¼°µ½Netty×Ô¼º·â×°µÄÏß³Ì×é¡¢Ï̳߳ء¢NIOỊ̈߳¬ÒÔ¼°ÒµÎñỊ̈߳¬Í¨ÐÅÁ´Â·µÄ´´½¨¡¢I/OÏûÏ¢µÄ¶Áд»áÉæ¼°µ½¸´ÔÓµÄÏß³ÌÇл»£¬Õâ»áÈóõѧÕßÔÆÉ½ÎíÈÆ£¬µ÷ÊÔÆðÀ´·Ç³£Í´¿à£¬ÉõÖÁ¶¼²»ÖªµÀ´ÓÄÄÀïµ÷ÊÔ£»

3) Netty°æ±¾µÄ¿ç¶È´ó£¬´Óʵ¼ÊÉÌÓÃÇé¿ö¿´£¬Éæ¼°µ½ÁËNetty 3.X¡¢4.XºÍ5.XµÈ¶à¸ö°æ±¾£¬Ã¿¸öMajor°æ±¾Ö®¼äÌØÐԱ仯·Ç³£´ó£¬¼´±ãÊÇMinor°æ±¾¶¼´æÔÚһЩ²îÒ죬ÕâЩ¹¦ÄÜÌØÐÔºÍÀà¿â²îÒì»á¸øÊ¹ÓÃÕß´øÀ´ºÜ¶àÎÊÌ⣬°æ±¾Éý¼¶Ö®ºóÉÔÓв»É÷¾Í»áµôÈëÏÝÚå¡£

2£ü°¸ÀýÀ´Ô´

Netty°¸Àý¼¯½õµÄ°¸ÀýÀ´Ô´ÓÚ×÷ÕßÔÚʵ¼ÊÏîÄ¿ÖÐÓöµ½µÄÎÊÌâ×ܽᡢÒÔ¼°NettyÉçÇøÍøÓѵķ´À¡£¬´ó¶àÊý°¸Àý¶¼À´Ô´ÓÚʵ¼ÊÏîÄ¿£¬Ò²ÓÐÉÙ²¿·ÖÊǶÁÕßÔÚѧϰNettyÖÐÔâÓöµÄ±È½ÏµäÐ͵ÄÎÊÌâ¡£

3£ü¶àÏß³ÌÆª

ѧϰºÍÕÆÎÕNetty¶àÏß³ÌÄ£ÐÍÊǸöÄѵ㣬ÔÚʵ¼ÊÏîÄ¿ÖÐÈçºÎʹÓúÃNetty¶àÏ̸߳ü¼ÓÀ§ÄÑ£¬ºÜ¶àÍøÉÏÎÊÌâºÍʹʶ¼À´Ô´ÓÚ¶ÔNettyÏß³ÌÄ£ÐÍÁ˽ⲻ͸³¹ËùÖ¡£¼øÓÚ´Ë£¬Netty°¸Àý¼¯½õϵÁоÍÊ×ÏÈ´Ó¶àÏ̷߳½Ã濪ʼ¡£

Netty 3 °æ±¾Éý¼¶ÔâÓöÄÚ´æÐ¹Â©°¸Àý

1£üÎÊÌâÃèÊö

ÒµÎñ´úÂëÉý¼¶Netty 3µ½Netty4Ö®ºó£¬ÔËÐÐÒ»¶Îʱ¼ä£¬Java½ø³Ì¾Í»áå´»ú£¬²é¿´ÏµÍ³ÔËÐÐÈÕÖ¾·¢ÏÖϵͳ·¢ÉúÁËÄÚ´æÐ¹Â¶£¨Ê¾Àý¶ÑÕ»£©£º


ͼ2-1 ÄÚ´æÐ¹Â©¶ÑÕ»

¶ÔÄÚ´æ½øÐÐ¼à¿Ø£¨Çл»Ê¹ÓöÑÄÚ´æ³Ø£¬·½±ã¶ÔÄÚ´æ½øÐÐ¼à¿Ø£©£¬·¢ÏÖ¶ÑÄÚ´æÒ»Ö±ì­Éý£¬ÈçÏÂËùʾ£¨Ê¾Àý¶ÑÄÚ´æ¼à¿Ø£©£º


ͼ2-2 ¶ÑÄÚ´æ¼à¿ØÊ¾Àý

2£üÎÊÌⶨλ

ʹÓÃjmap -dump:format=b,file=netty.bin PID ½«¶ÑÄÚ´ædump³öÀ´£¬Í¨¹ýIBMµÄHeapAnalyzer¹¤¾ß½øÐзÖÎö£¬·¢ÏÖByteBuf·¢ÉúÁËй¶¡£

ÒòΪʹÓÃÁËNetty 4µÄÄÚ´æ³Ø£¬ËùÒÔÊ×ÏÈ»³ÒÉÊDz»ÊÇÉêÇëµÄByteBufûÓб»Êͷŵ¼Ö£¿²é¿´´úÂ룬·¢ÏÖÏûÏ¢·¢ËÍÍê³ÉÖ®ºó£¬Nettyµ×²ãÒѾ­µ÷ÓÃReferenceCountUtil.release(message)¶ÔÄÚ´æ½øÐÐÁËÊÍ·Å¡£ÕâÊÇÔõô»ØÊÂÄØ£¿ÄѵÀNetty 4.XµÄÄÚ´æ³ØÓÐBug£¬µ÷ÓÃrelease²Ù×÷ÊÍ·ÅÄÚ´æÊ§°Ü£¿

¿¼Âǵ½Netty ÄÚ´æ³Ø×ÔÉíBugµÄ¿ÉÄÜÐÔ²»´ó£¬Ê×ÏÈ´ÓÒµÎñµÄʹÓ÷½Ê½ÈëÊÖ·ÖÎö£º

1£©ÄÚ´æµÄ·ÖÅäÊÇÔÚÒµÎñ´úÂëÖнøÐУ¬ÓÉÓÚʹÓõ½ÁËÒµÎñÏ̳߳Ø×öI/O²Ù×÷ºÍÒµÎñ²Ù×÷µÄ¸ôÀ룬ʵ¼ÊÉÏÄÚ´æÊÇÔÚÒµÎñÏß³ÌÖзÖÅäµÄ£»

2£©ÄÚ´æµÄÊͷŲÙ×÷ÊÇÔÚoutboundÖнøÐУ¬°´ÕÕNetty 3µÄÏß³ÌÄ£ÐÍ£¬downstream£¨¶ÔÓ¦Netty 4µÄoutbound£¬Netty 4È¡ÏûÁËupstreamºÍdownstream£©µÄhandlerÒ²ÊÇÓÉÒµÎñµ÷ÓÃÕßÏß³ÌÖ´Ðеģ¬Ò²¾ÍÊÇ˵ÉêÇëºÍÊÍ·ÅÔÚͬһ¸öÒµÎñÏß³ÌÖнøÐС£³õ´ÎÅŲ鲢ûÓз¢ÏÖµ¼ÖÂÄÚ´æÐ¹Â¶µÄ¸ùÒò£¬¼ÌÐø·ÖÎöNettyÄÚ´æ³ØµÄʵÏÖÔ­Àí¡£

Netty ÄÚ´æ³ØÊµÏÖÔ­Àí·ÖÎö£º²é¿´NettyµÄÄÚ´æ³Ø·ÖÅäÆ÷PooledByteBufAllocatorµÄÔ´ÂëʵÏÖ£¬·¢ÏÖÄÚ´æ³ØÊµ¼ÊÊÇ»ùÓÚÏß³ÌÉÏÏÂÎÄʵÏֵģ¬Ïà¹Ø´úÂëÈçÏ£º


ͼ2-3

Ò²¾ÍÊÇ˵ÄÚ´æµÄÉêÇëºÍÊͷűØÐëÔÚͬһÏß³ÌÉÏÏÂÎÄÖУ¬²»ÄÜ¿çÏ̡߳£¿çÏß³ÌÖ®ºóʵ¼Ê²Ù×÷µÄ¾Í²»ÊÇͬһ¿é¶ùÄÚ´æÇøÓò£¬Õâ»áµ¼ÖºܶàÑÏÖØµÄÎÊÌ⣬ÄÚ´æÐ¹Â¶±ãÊÇÆäÖÐÖ®Ò»¡£ÄÚ´æÔÚAÏß³ÌÉêÇ룬Çл»µ½BÏß³ÌÊÍ·Å£¬Êµ¼ÊÊÇÎÞ·¨ÕýÈ·»ØÊյġ£

3£üÎÊÌâ¸ùÒò

Netty 4ÐÞ¸ÄÁËNetty 3µÄÏß³ÌÄ£ÐÍ£ºÔÚNetty 3µÄʱºò£¬upstreamÊÇÔÚI/OÏß³ÌÀïÖ´Ðе쬶ødownstreamÊÇÔÚÒµÎñÏß³ÌÀïÖ´ÐС£µ±Netty´ÓÍøÂç¶Áȡһ¸öÊý¾Ý±¨Í¶µÝ¸øÒµÎñhandlerµÄʱºò£¬handlerÊÇÔÚI/OÏß³ÌÀïÖ´ÐУ»¶øµ±ÎÒÃÇÔÚÒµÎñÏß³ÌÖе÷ÓÃwriteºÍwriteAndFlushÏòÍøÂç·¢ËÍÏûÏ¢µÄʱºò,handlerÊÇÔÚÒµÎñÏß³ÌÀïÖ´ÐУ¬Ö±µ½×îºóÒ»¸öHeader handler½«ÏûϢдÈëµ½·¢ËͶÓÁÐÖУ¬ÒµÎñÏ̲߳ŷµ»Ø¡£

Netty4ÐÞ¸ÄÁËÕâһģÐÍ£¬ÔÚNetty 4Àïinbound(¶ÔÓ¦Netty 3µÄupstream)ºÍoutbound(¶ÔÓ¦Netty 3µÄdownstream)¶¼ÊÇÔÚNioEventLoop(I/OÏß³Ì)ÖÐÖ´ÐС£µ±ÎÒÃÇÔÚÒµÎñÏß³ÌÀïͨ¹ýChannelHandlerContext.write·¢ËÍÏûÏ¢µÄʱºò£¬Netty 4ÔÚ½«ÏûÏ¢·¢ËÍʼþµ÷¶Èµ½ChannelPipelineµÄʱºò£¬Ê×ÏȽ«´ý·¢Ë͵ÄÏûÏ¢·â×°³ÉÒ»¸öTask£¬È»ºó·Åµ½NioEventLoopµÄÈÎÎñ¶ÓÁÐÖУ¬ÓÉNioEventLoopÏß³ÌÒì²½Ö´ÐС£ºóÐøËùÓÐhandlerµÄµ÷¶ÈºÍÖ´ÐУ¬°üÀ¨ÏûÏ¢µÄ·¢ËÍ¡¢I/OʼþµÄ֪ͨ£¬¶¼ÓÉNioEventLoopÏ̸߳ºÔð´¦Àí¡£

ÔÚ±¾°¸ÀýÖУ¬ByteBufÔÚÒµÎñÏß³ÌÖÐÉêÇ룬ÔÚºóÐøµÄChannelHandlerÖÐÊÍ·Å£¬ChannelHandlerÊÇÓÉNettyµÄI/OÏß³Ì(EventLoop)Ö´Ðеģ¬Òò´ËÄÚ´æµÄÉêÇëºÍÊͷŲ»ÔÚͬһ¸öÏß³ÌÖУ¬µ¼ÖÂÄÚ´æÐ¹Â©¡£

Netty 3µÄI/Oʼþ´¦ÀíÁ÷³Ì£º


ͼ2-4 Netty 3µÄI/OÏß³ÌÄ£ÐÍ

Netty 4µÄI/OÏûÏ¢´¦ÀíÁ÷³Ì£º


ͼ2-5 Netty 4 I/OÏß³ÌÄ£ÐÍ

4£ü°¸Àý×ܽá

Netty 4.X°æ±¾ÐÂÔöµÄÄÚ´æ³ØÈ·Êµ·Ç³£¸ßЧ£¬µ«ÊÇÈç¹ûʹÓò»µ±Ôò»áµ¼Ö¸÷ÖÖÑÏÖØµÄÎÊÌâ¡£ÖîÈçÄÚ´æÐ¹Â¶ÕâÀàÎÊÌ⣬¹¦ÄܲâÊÔ²¢Ã»ÓÐÒì³££¬Èç¹ûÏà¹Ø½Ó¿ÚûÓнøÐÐѹ²â»òÕßÎȶ¨ÐÔ²âÊÔ¶øÖ±½ÓÉÏÏߣ¬Ôò»áµ¼ÖÂÑÏÖØµÄÏßÉÏÎÊÌâ¡£

ÄÚ´æ³ØPooledByteBufµÄʹÓý¨Ò飺

1£©ÉêÇëÖ®ºóÒ»¶¨Òª¼ÇµÃÊÍ·Å£¬Netty×ÔÉíSocket¶ÁÈ¡ºÍ·¢Ë͵ÄByteBufϵͳ»á×Ô¶¯ÊÍ·Å£¬Óû§²»ÐèÒª×ö¶þ´ÎÊÍ·Å£»Èç¹ûÓû§Ê¹ÓÃNettyµÄÄÚ´æ³ØÔÚÓ¦ÓÃÖÐ×öByteBufµÄ¶ÔÏó³ØÊ¹Óã¬ÔòÐèÒª×Ô¼ºÖ÷¶¯ÊÍ·Å£»

2£©±ÜÃâ´íÎóµÄÊÍ·Å£º¿çÏß³ÌÊÍ·Å¡¢Öظ´Êͷŵȶ¼ÊÇ·Ç·¨²Ù×÷£¬Òª±ÜÃâ¡£ÌØ±ðÊÇ¿çÏß³ÌÉêÇëºÍÊÍ·Å£¬ÍùÍù¾ßÓÐÒþ±ÎÐÔ£¬ÎÊÌⶨλÄѶȽϴó£»

3£©·ÀÖ¹ÒþʽµÄÉêÇëºÍ·ÖÅä£ºÖ®Ç°Ôø¾­·¢Éú¹ýÒ»¸ö°¸Àý£¬ÎªÁ˽â¾öÄÚ´æ³Ø¿çÏß³ÌÉêÇëºÍÊÍ·ÅÎÊÌ⣬ÓÐÓû§¶ÔÄÚ´æ³Ø×öÁ˶þ´Î°ü×°£¬ÒÔʵÏÖ¶àÏ̲߳Ù×÷ʱ£¬ÄÚ´æÊ¼ÖÕÓɰü×°µÄ¹ÜÀíÏß³ÌÉêÇëºÍÊÍ·Å£¬ÕâÑù¿ÉÒÔÆÁ±ÎÓû§ÒµÎñÏß³ÌÄ£ÐͺͷÃÎÊ·½Ê½µÄ²îÒ졣˭֪ÔËÐÐÒ»¶Îʱ¼äÖ®ºóÔٴη¢ÉúÁËÄÚ´æÐ¹Â¶£¬×îºó·¢ÏÖÔ­À´µ÷ÓÃByteBufµÄwrite²Ù×÷ʱ£¬Èç¹ûÄÚ´æÈÝÁ¿²»×㣬»á×Ô¶¯½øÐÐÈÝÁ¿À©Õ¹¡£À©Õ¹²Ù×÷ÓÉÒµÎñÏß³ÌÖ´ÐУ¬Õâ¾ÍÈÆ¹ýÁËÄÚ´æ³Ø¹ÜÀíỊ̈߳¬·¢ÉúÁË¡°ÒýÓÃÌÓÒÝ¡±£»

4£©±ÜÃâ¿çÏß³ÌÉêÇëºÍʹÓÃÄÚ´æ³Ø£¬ÓÉÓÚ´æÔÚ¡°ÒýÓÃÌÓÒÝ¡±µÈÒþʽµÄÄÚ´æ´´½¨£¬Êµ¼ÊÉÏ¿çÏß³ÌÉêÇëºÍʹÓÃÄÚ´æ³ØÊǷdz£Î£ÏÕµÄÐÐΪ¡£¾¡¹Ü´Ó¼¼Êõ½Ç¶È¿´¿ÉÒÔʵÏÖÒ»¸ö¿çÏß³ÌЭµ÷µÄÄÚ´æ³Ø»úÖÆ£¬ÉõÖÁÖØÐ´PooledByteBufAllocator£¬µ«ÊÇÕâÎÞÒÉ»áÔö¼ÓºÜ¶à¸´ÔÓÐÔ£¬Í¨³£Ò²Ê¹Óò»µ½¡£Èç¹ûȷʵ´æÔÚ¿çÏ̵߳ÄByteBuf´«µÝ£¬¶øÇÒÎÞ·¨±£Ö¤ByteBufÔÚÁíÒ»¸öÏß³ÌÖлáÖØÐ·ÖÅä´óСµÈ²Ù×÷£¬×î¼òµ¥±£Ïյķ½Ê½¾ÍÊÇÔÚÏß³ÌÇл»µã×öÒ»´ÎByteBufµÄ¿½±´£¬µ«Õâ»áÔì³ÉÐÔÄÜϽµ¡£

±È½ÏºÃµÄÒ»ÖÖ·½°¸¾ÍÊÇÈç¹û´æÔÚ¿çÏ̵߳ÄByteBuf´«µÝ£¬¶ÔByteBufµÄд²Ù×÷ÒªÔÚ·ÖÅäÏß³ÌÍê³É£¬ÁíÒ»¸öÏß³ÌÖ»ÄÜ×ö¶Á²Ù×÷¡£²Ù×÷Íê³ÉÖ®ºó·¢ËÍÒ»¸öʼþ֪ͨ·ÖÅäỊ̈߳¬ÓÉ·ÖÅäÏß³ÌÖ´ÐÐÄÚ´æÊͷŲÙ×÷¡£

Netty 3 °æ±¾Éý¼¶ÐÔÄÜϽµ°¸Àý

1£üÎÊÌâÃèÊö

ÒµÎñ´úÂëÉý¼¶Netty 3µ½Netty4Ö®ºó£¬²¢Ã»Óиø²úÆ·´øÀ´Ô¤ÆÚµÄÐÔÄÜÌáÉý£¬ÓÐЩÉõÖÁ»¹·¢ÉúÁ˷dz£ÑÏÖØµÄÐÔÄÜϽµ£¬ÕâÓëNetty ¹Ù·½¸ø³öµÄÊý¾Ý²¢²»Ò»Ö¡£

Netty ¹Ù·½ÐÔÄܲâÊÔ¶Ô±ÈÊý¾Ý£ºÎÒÃDZȽÏÁËÁ½¸ö·Ö±ð½¨Á¢ÔÚNetty 3ºÍ4»ù´¡ÉÏechoЭÒé·þÎñÆ÷¡££¨Echo·Ç³£¼òµ¥£¬ÕâÑù£¬ÈκÎÀ¬»øµÄ²úÉú¶¼ÊÇNettyµÄÔ­Òò£¬¶ø²»ÊÇЭÒéµÄÔ­Òò£©¡£ÎÒʹËüÃÇ·þÎñÓÚÏàͬµÄ·Ö²¼Ê½echoЭÒé¿Í»§¶Ë£¬À´×ÔÕâЩ¿Í»§¶ËµÄ16384¸ö²¢·¢Á¬½ÓÖØ¸´·¢ËÍ256×Ö½ÚµÄËæ»ú¸ºÔØ£¬¼¸ºõʹǧÕ×ÒÔÌ«Íø±¥ºÍ¡£

¸ù¾Ý²âÊÔ½á¹û£¬Netty 4£º

  • GCÖÐ¶ÏÆµÂÊÊÇÔ­À´µÄ1/5£º 45.5 vs. 9.2´Î/·ÖÖÓ
  • À¬»øÉú³ÉËÙ¶ÈÊÇÔ­À´µÄ1/5£º 207.11 vs 41.81 MiB/Ãë

2£üÎÊÌⶨλ

Ê×ÏÈͨ¹ýJMCµÈÐÔÄÜ·ÖÎö¹¤¾ß¶ÔÐÔÄÜÈÈµã½øÐзÖÎö£¬Ê¾ÀýÈçÏ£¨ÐÅÏ¢°²È«µÈÔ­Òò£¬Ö»¸ø³ö·ÖÎö¹ý³ÌʾÀý½ØÍ¼£©£º


ͼ3-1 ÐÔÄÜÈȵãÏ̶߳ÑÕ»

ͨ¹ý¶ÔÈȵ㷽·¨µÄ·ÖÎö£¬·¢ÏÖÔÚÏûÏ¢·¢Ë͹ý³ÌÖУ¬ÓÐÁ½´¦Èȵ㣺

  • 1£©ÏûÏ¢·¢ËÍÐÔÄÜͳ¼ÆÏà¹ØHandler;
  • 2£©±àÂëHandler¡£

¶ÔʹÓÃNetty 3°æ±¾µÄÒµÎñ²úÆ·½øÐÐÐÔÄܶԱȲâÊÔ£¬·¢ÏÖÉÏÊöÁ½¸öHandlerÒ²ÊÇÈȵ㷽·¨¡£¼ÈÈ»¶¼ÊÇÈȵ㣬ΪɶÇл»µ½Netty4Ö®ºóÐÔÄÜϽµÕâôÀ÷º¦ÄØ£¿

ͨ¹ý·½·¨µÄµ÷ÓÃÊ÷·ÖÎö·¢ÏÖÁËÁ½¸ö°æ±¾µÄ²îÒ죺ÔÚNetty 3ÖУ¬ÉÏÊöÁ½¸öÈȵ㷽·¨¶¼ÊÇÓÉÒµÎñÏ̸߳ºÔðÖ´ÐУ»¶øÔÚNetty 4ÖУ¬ÔòÊÇÓÉNioEventLoop(I/O)Ïß³ÌÖ´ÐС£¶ÔÓÚij¸öÁ´Â·£¬ÒµÎñÊÇÓµÓжà¸öÏ̵߳ÄÏ̳߳أ¬¶øNioEventLoopÖ»ÓÐÒ»¸ö£¬ËùÒÔÖ´ÐÐЧÂʸüµÍ£¬·µ»Ø¸ø¿Í»§¶ËµÄÓ¦´ðʱÑӾʹó¡£Ê±ÑÓÔö´óÖ®ºó£¬×ÔÈ»µ¼ÖÂϵͳ²¢·¢Á¿½µµÍ£¬ÐÔÄÜϽµ¡£

ÕÒ³öÎÊÌâ¸ùÒòÖ®ºó£¬Õë¶ÔNetty 4µÄÏß³ÌÄ£ÐͶÔÒµÎñ½øÐÐרÏîÓÅ»¯£¬½«ºÄʱµÄ±àÂëµÈ²Ù×÷Ç¨ÒÆµ½ÒµÎñÏß³ÌÖÐÖ´ÐУ¬ÎªI/OÏ̼߳õ¸º£¬ÐÔÄÜ´ïµ½Ô¤ÆÚ£¬Ô¶³¬¹ýÁËNetty 3Àϰ汾µÄÐÔÄÜ¡£

Netty 3µÄÒµÎñÏ̵߳÷¶ÈÄ£ÐÍͼÈçÏÂËùʾ£º³ä·ÖÀûÓÃÁËÒµÎñ¶àÏ̲߳¢ÐбàÂëºÍHandler´¦ÀíµÄÓÅÊÆ£¬ÖÜÆÚTÄÚ¿ÉÒÔ´¦ÀíNÌõÒµÎñÏûÏ¢£º


ͼ3-2 Netty 3 HandlerÖ´ÐÐÏß³ÌÄ£ÐÍ

Çл»µ½Netty 4Ö®ºó£¬ÒµÎñºÄʱHandler±»I/OÏ̴߳®ÐÐÖ´ÐУ¬Òò´ËÐÔÄÜ·¢Éú±È½Ï´óµÄϽµ£º


ͼ3-3 Netty 4 HandlerÖ´ÐÐÏß³ÌÄ£ÐÍ

3£üÎÊÌâ×ܽá

¸ÃÎÊÌâµÄ¸ùÒò»¹ÊÇÓÉÓÚNetty 4µÄÏß³ÌÄ£Ðͱä¸üÒýÆð£¬Ïß³ÌÄ£Ðͱä¸üÖ®ºó£¬²»½öÓ°ÏìÒµÎñµÄ¹¦ÄÜ£¬ÉõÖÁ¶ÔÐÔÄÜÒ²»áÔì³ÉºÜ´óµÄÓ°Ïì¡£

¶ÔNettyµÄÉý¼¶ÐèÒª´Ó¹¦ÄÜ¡¢¼æÈÝÐÔºÍÐÔÄܵȶà¸ö½Ç¶È½øÐÐ×ۺϿ¼ÂÇ£¬Çв»¿ÉÖ»¶¢×ÅAPI±ä¸üÕâ¸öÖ¥Â飬¶ø¶ªµôÁËÐÔÄÜÕâ¸öÎ÷¹Ï¡£APIµÄ±ä¸ü»áµ¼Ö±àÒë´íÎ󣬵«ÊÇÐÔÄÜϽµÈ´Òþ²ØÓÚÎÞÐÎÖ®ÖУ¬ÉÔ²»ÁôÒâ¾Í»áÖÐÕС£

¶ÔÓÚ½²¾¿¿ìËÙ½»¸¶¡¢Ãô½Ý¿ª·¢ºÍ»Ò¶È·¢²¼µÄ»¥ÁªÍøÓ¦Óã¬Éý¼¶µÄʱºò¸üÓ¦¸ÃÒªµ±ÐÄ¡£

NettyÒµÎñHandler½ÓÊÕ²»µ½ÏûÏ¢°¸Àý

1£üÎÊÌâÃèÊö

ÎҵķþÎñÅöµ½Ò»¸öÎÊÌ⣬¾­³£ÓÐÇëÇóÉÏÀ´µ½MessageDecoder¾Í½áÊøÁË£¬Ã»ÓмÌÐøÍùLogicServerHandlerÀïÃæËÍ£¬¾õµÃºÜÆæ¹Ö£¬ÊDz»ÊÇÏ̳߳ØÂúÁË£¿ÎÒÏëÇë½Ì£º

1£©netty 5ÈçºÎ´òÓ¡executorÏ̵߳ÄÕ¼ÓÃÇé¿ö£¬Èç¿ÕÏÐÏß³ÌÊý£¿
2£©executorÉèÖõĴóСһ°ãÈçºÎ½øÐмÆËãµÄ£¿

ÒµÎñ´úÂëʾÀýÈçÏ£º

2£üÎÊÌⶨλ


´Ó·þÎñ¶Ë³õʼ»¯´úÂëÀ´¿´£¬²¢Ã»ÓÐʲôÎÊÌ⣬ҵÎñLogicServerHandlerûÓнÓÊÕµ½ÏûÏ¢£¬ÓÐÈçϼ¸ÖÖ¿ÉÄÜ£º

1£©¿Í»§¶Ë²¢Ã»Óн«ÏûÏ¢·¢Ë͵½·þÎñ¶Ë£¬¿ÉÒÔÔÚ·þÎñ¶ËLoggingHandlerÖдòÓ¡ÈÕÖ¾²é¿´£»

2£©·þÎñ¶Ë²¿·ÖÏûÏ¢½âÂë·¢ÉúÒì³££¬µ¼ÖÂÏûÏ¢±»¶ªÆú/ºöÂÔ£¬Ã»ÓÐ×ßµ½LogicServerHandlerÖУ»

3£©Ö´ÐÐÒµÎñHandlerµÄDefaultEventExecutorÖеÄÏß³ÌÌ«·±Ã¦£¬µ¼ÖÂÈÎÎñ¶ÓÁлýѹ£¬³¤Ê±¼äµÃ²»µ½´¦Àí¡£

ͨ¹ý×¥°ü½áºÏÈÕÖ¾·ÖÎö£¬¿ÉÄܵ¼ÖÂÎÊÌâµÄÔ­Òò1ºÍ2Åųý£¬ÐèÒª¼ÌÐø¶Ô¿ÉÄÜÔ­Òò3½øÐÐÅŲ顣

Netty 5ÈçºÎ´òÓ¡executorÏ̵߳ÄÕ¼ÓÃÇé¿ö£¬Èç¿ÕÏÐÏß³ÌÊý£¿»Ø´ðÕâЩÎÊÌ⣬Ê×ÏÈÒªÁ˽âNettyµÄÏß³Ì×éºÍÏ̳߳ػúÖÆ¡£

NettyµÄEventExecutorGroupʵ¼Ê¾ÍÊÇÒ»×éEventExecutor£¬ËüµÄ¶¨ÒåÈçÏ£º

ͨ³£Í¨¹ýËüµÄnext·½·¨´ÓÏß³Ì×éÖлñȡһ¸öÏ̳߳أ¬´úÂëÈçÏ£º

Netty EventExecutorµÄµäÐÍʵÏÖÓÐÁ½¸ö£ºDefaultEventExecutorºÍSingleThreadEventLoop£¬ÔÚ±¾°¸ÀýÖУ¬ÒòΪʹÓõÄÊÇDefaultEventExecutorGroup£¬ËùÒÔʵ¼ÊÖ´ÐÐÒµÎñHandlerµÄÏ̳߳ؾÍÊÇDefaultEventExecutor£¬Ëü¼Ì³Ð×ÔSingleThreadEventExecutor£¬´ÓÃû³Æ¾Í¿ÉÒÔ¿´³öËüÊǸöµ¥Ï̵߳ÄÏ̳߳ء£ËüµÄ¹¤×÷Ô­ÀíÈçÏ£º

1£©DefaultEventExecutor¾ÛºÏJDKµÄExecutorºÍThread, Ê×´ÎÖ´ÐÐTaskµÄʱºòÆô¶¯Ị̈߳¬½«Ï̳߳Ø×´Ì¬ÐÞ¸ÄΪÔËÐÐ̬£»

2£©Thread run·½·¨Ñ­»·´Ó¶ÓÁÐÖлñÈ¡TaskÖ´ÐУ¬Èç¹û¶ÓÁÐΪ¿Õ£¬Ôòͬ²½×èÈû£¬Ïß³ÌÎÞÏÞÑ­»·Ö´ÐУ¬Ö±µ½½ÓÊÕµ½Í˳öÐźš£


ͼ4-1 DefaultEventExecutor¹¤×÷Ô­Àí

Óû§Ïëͨ¹ýNettyÌṩµÄDefaultEventExecutorGroupÀ´²¢·¢Ö´ÐÐÒµÎñHandler£¬µ«Êµ¼ÊÉÏÈ´Êǵ¥Ïß³ÌSingleThreadEventExecutorÔÚ´®ÐÐÖ´ÐÐÒµÎñÂß¼­£¬µ±·þÎñ¶ËÏûÏ¢½ÓÊÕËٶȳ¬¹ýÒµÎñÂß¼­Ö´ÐÐËÙ¶Èʱ£¬¾Í»áµ¼ÖÂÒµÎñÏûÏ¢»ýѹÔÚSingleThreadEventExecutorµÄÏûÏ¢¶ÓÁÐÖеò»µ½¼°Ê±´¦Àí£¬ÏÖÏó¾ÍÊÇÒµÎñHandlerºÃÏñµÃ²»µ½Ö´ÐУ¬²¿·ÖÒµÎñÏûÏ¢¶ªÊ§¡£

½²½âÍêNettyÏß³ÌÄ£Ðͺó£¬ÎÊÌâÔ­ÒòÒ²¶¨Î»³öÀ´ÁË¡£ÆäʵÎÒÃÇ·¢ÏÖ£¬¿ÉÒÔͨ¹ýEventExecutor»ñÈ¡EventExecutorGroupµÄÐÅÏ¢£¬È»ºó»ñÈ¡Õû¸öEventExecutorÏß³Ì×éÐÅÏ¢£¬×îºó´òÓ¡Ï̸߳ºÔØÐÅÏ¢£¬´úÂëÈçÏ£º

Ö´Ðнá¹ûÈçÏ£º

3£üÎÊÌâ×ܽá

ÊÂʵÉÏ£¬NettyΪÁË·ÀÖ¹¶àÏß³ÌÖ´ÐÐij¸öHandler£¨Channel£©ÒýÆðḬ̈߳²È«ÎÊÌ⣬ʵ¼ÊÖ»ÓÐÒ»¸öÏ̻߳áÖ´ÐÐij¸öHandler£¬´úÂëÈçÏ£º

ÐèÒªÖ¸³öµÄÊÇ£¬SingleThreadEventExecutorµÄpendingTasks¿ÉÄÜÊǸöºÄʱµÄ²Ù×÷£¬Òò´Ëµ÷ÓõÄʱºòÐèҪעÒ⣺

ʵ¼Ê¾ÍÏñJDKµÄÏ̳߳أ¬²»Í¬µÄÒµÎñ³¡¾°¡¢Ó²¼þ»·¾³ºÍÐÔÄܱê¾Í»áÓв»Í¬µÄÅäÖã¬ÎÞ·¨¸ø³ö±ê×¼µÄ´ð°¸¡£ÐèÒª½øÐÐʵ¼Ê²âÊÔ¡¢ÆÀ¹ÀºÍµ÷ÓÅÀ´Áé»îµ÷Õû¡£

×îºóÔÙ×Ü½á»Ø¹ËÏÂÎÊÌ⣬¶ÔÓÚ°¸ÀýÖеĴúÂ룬ʵ¼ÊÉÏÔÚʹÓõ¥Ï̴߳¦Àíij¸öHandlerµÄLogicServerHandler£¬×÷Õß¿ÉÄÜÏë²¢·¢¶àÏß³ÌÖ´ÐÐÕâ¸öHandler£¬ÌáÉýÒµÎñ´¦ÀíÐÔÄÜ£¬µ«Êµ¼Ê²¢Ã»ÓдﵽÉè¼ÆÐ§¹û¡£

Èç¹ûÒµÎñÐÔÄÜ´æÔÚÎÊÌ⣬²¢²»Ææ¹Ö£¬ÒòΪҵÎñʵ¼ÊÊǵ¥Ï̴߳®Ðд¦ÀíµÄ£¡µ±È»£¬Èç¹ûÒµÎñ´æÔÚ¶à¸öChannel£¬Ôòÿ¸ö/¶à¸öChannel»á¶ÔÓ¦Ò»¸öỊ̈߳¨³Ø£©£¬Ò²¿ÉÒÔʵÏÖ¶àÏ̴߳¦Àí£¬ÕâÈ¡¾öÓÚ¿Í»§¶ËµÄ½ÓÈëÊý¡£

°¸ÀýÖдúÂëµÄÏ̴߳¦ÀíÄ£ÐÍÈçÏÂËùʾ£¨µ¥¸öÁ´Â·Ä£ÐÍ£©£º


ͼ4-3 µ¥Ïß³ÌÖ´ÐÐÒµÎñÂß¼­Ïß³ÌÄ£ÐÍͼ

Netty 4 ChannelHandlerḬ̈߳²È«ÒÉÎÊ

1£üÎÊÌâ×Éѯ

ÎÒÓÐÒ»¸ö·ÇḬ̈߳²È«µÄÀàThreadUnsafeClass£¬Õâ¸öÀà»áÔÚchannelRead·½·¨Öб»µ÷Óá£ÎÒÏÂÃæÕâÑùµÄµ÷Ó÷½·¨ÔÚ¶àÏ̻߳·¾³Ï°²È«Âð£¿Ð»Ð»£¡

´úÂëʾÀýÈçÏ£º

2£ü½â´ð

Netty 4ÓÅ»¯ÁËNetty 3µÄÏß³ÌÄ£ÐÍ£¬ÆäÖÐÒ»¸ö·Ç³£´óµÄÓÅ»¯¾ÍÊÇÓû§²»ÐèÒªÔÙµ£ÐÄChannelHandler»á±»²¢·¢µ÷Óã¬×ܽáÈçÏ£º

  • 1£©ChannelHandler'sµÄ·½·¨²»»á±»Netty²¢·¢µ÷Óã»
  • 2£©Óû§²»ÔÙÐèÒª¶ÔChannelHandlerµÄ¸÷¸ö·½·¨×öͬ²½±£»¤£»
  • 3£©ChannelHandlerʵÀý²»ÔÊÐí±»¶à´ÎÌí¼Óµ½ChannelPipleÖУ¬·ñÔòḬ̈߳²È«½«µÃ²»µ½±£Ö¤¡£

¸ù¾ÝÉÏÊö·ÖÎö£¬MyHandlerµÄchannelRead·½·¨²»»á±»²¢·¢µ÷Óã¬Òò´Ë²»´æÔÚḬ̈߳²È«ÎÊÌâ¡£

3£üÒ»Ð©ÌØÀý

ChannelHandlerµÄḬ̈߳²È«´æÔÚ¼¸¸öÌØÀý£¬×ܽáÈçÏ£º

1£©Èç¹ûChannelHandler±»×¢½âΪ @Sharable£¬È«¾ÖÖ»ÓÐÒ»¸öhandlerʵÀý£¬Ëü»á±»¶à¸öChannelµÄPipeline¹²Ïí£¬»á±»¶àÏ̲߳¢·¢µ÷Óã¬Òò´ËËü²»ÊÇḬ̈߳²È«µÄ£»

2£©Èç¹û´æÔÚ¿çChannelHandlerµÄʵÀý¼¶±äÁ¿¹²Ïí£¬ÐèÒªÌØ±ð×¢Ò⣬Ëü¿ÉÄܲ»ÊÇḬ̈߳²È«µÄ¡£

·ÇḬ̈߳²È«µÄ¿çChannelHandler±äÁ¿Ô­ÀíÈçÏ£º


ͼ5-1 ´®Ðе÷Óã¬Ḭ̈߳²È«

NettyÖ§³ÖÔÚÌí¼ÓChannelHandlerµÄʱºò£¬Ö¸¶¨Ö´ÐиÃHandlerµÄEventExecutorGroup£¬Õâ¾ÍÒâζ×ÅÔÚÕû¸öChannelPipelineÖ´Ðйý³ÌÖУ¬¿ÉÄܻᷢÉúÏß³ÌÇл»¡£´Ëʱ£¬Èç¹ûͬһ¸ö¶ÔÏóÔÚ¶à¸öChannelHandlerÖб»¹²Ïí£¬¿ÉÄܻᱻ¶àÏ̲߳¢·¢²Ù×÷£¬Ô­ÀíÈçÏ£º


ͼ5-2 ²¢Ðе÷Ó㬶àHandler¹²Ïí³ÉÔ±±äÁ¿£¬·ÇḬ̈߳²È«

   
4047 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ