NettyÊÇÒ»¸ö¸ßÐÔÄÜ¡¢Ò첽ʼþÇý¶¯µÄNIO¿ò¼Ü£¬ËüÌṩÁ˶ÔTCP¡¢UDPºÍÎļþ´«ÊäµÄÖ§³Ö£¬×÷Ϊһ¸öÒì²½NIO¿ò¼Ü£¬NettyµÄËùÓÐIO²Ù×÷¶¼ÊÇÒì²½·Ç×èÈûµÄ£¬Í¨¹ýFuture-Listener»úÖÆ£¬Óû§¿ÉÒÔ·½±ãµÄÖ÷¶¯»ñÈ¡»òÕßͨ¹ý֪ͨ»úÖÆ»ñµÃIO²Ù×÷½á¹û¡£

×÷Ϊµ±Ç°×îÁ÷ÐеÄNIO¿ò¼Ü£¬NettyÔÚ»¥ÁªÍøÁìÓò¡¢´óÊý¾Ý·Ö²¼Ê½¼ÆËãÁìÓò¡¢ÓÎÏ·ÐÐÒµ¡¢Í¨ÐÅÐÐÒµµÈ»ñµÃÁ˹㷺µÄÓ¦Óã¬Ò»Ð©Òµ½çÖøÃûµÄ¿ªÔ´×é¼þÒ²»ùÓÚNettyµÄNIO¿ò¼Ü¹¹½¨¡£
ΪʲôѡÔñNetty
NettyÊÇÒµ½ç×îÁ÷ÐеÄNIO¿ò¼ÜÖ®Ò»£¬ËüµÄ½¡×³ÐÔ¡¢¹¦ÄÜ¡¢ÐÔÄÜ¡¢¿É¶¨ÖÆÐԺͿÉÀ©Õ¹ÐÔÔÚͬÀà¿ò¼ÜÖж¼ÊÇÊ×ÇüÒ»Ö¸µÄ£¬ËüÒѾµÃµ½³É°ÙÉÏǧµÄÉÌÓÃÏîÄ¿ÑéÖ¤£¬ÀýÈçHadoopµÄRPC¿ò¼ÜavroʹÓÃNetty×÷Ϊµ×²ãͨÐÅ¿ò¼Ü£»ºÜ¶àÆäËûÒµ½çÖ÷Á÷µÄRPC¿ò¼Ü£¬Ò²Ê¹ÓÃNettyÀ´¹¹½¨¸ßÐÔÄܵÄÒ첽ͨÐÅÄÜÁ¦¡£
ͨ¹ý¶ÔNettyµÄ·ÖÎö£¬ÎÒÃǽ«ËüµÄÓŵã×ܽáÈçÏÂ:
1.APIʹÓüòµ¥£¬¿ª·¢Ãż÷µÍ£»
2.¹¦ÄÜÇ¿´ó£¬Ô¤ÖÃÁ˶àÖÖ±à½âÂ빦ÄÜ£¬Ö§³Ö¶àÖÖÖ÷Á÷ÐÒ飻
3.¶¨ÖÆÄÜÁ¦Ç¿£¬¿ÉÒÔͨ¹ýChannelHandler¶ÔͨÐÅ¿ò¼Ü½øÐÐÁé»îµØÀ©Õ¹£»
4.ÐÔÄܸߣ¬Í¨¹ýÓëÆäËûÒµ½çÖ÷Á÷µÄNIO¿ò¼Ü¶Ô±È£¬NettyµÄ×ÛºÏÐÔÄÜ×îÓÅ£»
5.³ÉÊì¡¢Îȶ¨£¬NettyÐÞ¸´ÁËÒѾ·¢ÏÖµÄËùÓÐJDK NIO BUG£¬ÒµÎñ¿ª·¢ÈËÔ±²»ÐèÒªÔÙΪNIOµÄBUG¶ø·³ÄÕ£»
6.ÉçÇø»îÔ¾£¬°æ±¾µü´úÖÜÆÚ¶Ì£¬·¢ÏÖµÄBUG¿ÉÒÔ±»¼°Ê±ÐÞ¸´£¬Í¬Ê±£¬¸ü¶àµÄй¦ÄÜ»á¼ÓÈ룻
¾ÀúÁË´ó¹æÄ£µÄÉÌÒµÓ¦Óÿ¼Ñ飬ÖÊÁ¿µÃµ½ÑéÖ¤¡£ÔÚ»¥ÁªÍø¡¢´óÊý¾Ý¡¢ÍøÂçÓÎÏ·¡¢ÆóÒµÓ¦ÓᢵçÐÅÈí¼þµÈÖÚ¶àÐÐÒµµÃµ½³É¹¦ÉÌÓã¬Ö¤Ã÷ÁËËüÒѾÍêÈ«Äܹ»Âú×㲻ͬÐÐÒµµÄÉÌÒµÓ¦ÓÃÁË¡£
Netty¼Ü¹¹·ÖÎö
Netty ²ÉÓÃÁ˱ȽϵäÐ͵ÄÈý²ãÍøÂç¼Ü¹¹½øÐÐÉè¼Æ£¬Âß¼¼Ü¹¹Í¼ÈçÏÂËùʾ£º

µÚÒ»²ã£ºReactor ͨÐŵ÷¶È²ã£¬ËüÓÉһϵÁи¨ÖúÀàÍê³É£¬°üÀ¨ Reactor
Ïß³Ì NioEventLoop ÒÔ¼°Æä¸¸Àà¡¢NioSocketChannel/NioServerSocketChannel
ÒÔ¼°Æä¸¸ Àà¡¢ByteBuffer ÒÔ¼°ÓÉÆäÑÜÉú³öÀ´µÄ¸÷ÖÖ Buffer¡¢Unsafe ÒÔ¼°ÆäÑÜÉú³öµÄ¸÷ÖÖÄÚ
²¿ÀàµÈ¡£¸Ã²ãµÄÖ÷ÒªÖ°Ôð¾ÍÊǼàÌýÍøÂçµÄ¶ÁдºÍÁ¬½Ó²Ù×÷£¬¸ºÔð½«ÍøÂç²ãµÄÊý¾Ý ¶ÁÈ¡µ½Äڴ滺³åÇøÖУ¬È»ºó´¥·¢¸÷ÖÖÍøÂçʼþ£¬ÀýÈçÁ¬½Ó´´½¨¡¢Á¬½Ó¼¤»î¡¢¶ÁÊÂ
¼þ¡¢Ð´Ê¼þµÈµÈ£¬½«ÕâЩʼþ´¥·¢µ½ PipeLine ÖУ¬ÓÉ PipeLine ³äµ±µÄÖ°ÔðÁ´À´ ½øÐкóÐøµÄ´¦Àí¡£
µÚ¶þ²ã£ºÖ°ÔðÁ´ PipeLine£¬Ëü¸ºÔðʼþÔÚÖ°ÔðÁ´ÖеÄÓÐÐò´«²¥£¬Í¬Ê±¸ºÔð¶¯Ì¬µÄ
±àÅÅÖ°ÔðÁ´£¬Ö°ÔðÁ´¿ÉÒÔÑ¡Ôñ¼àÌýºÍ´¦Àí×Ô¼º¹ØÐĵÄʼþ£¬Ëü¿ÉÒÔÀ¹½Ø´¦ÀíºÍÏò ºó/Ïòǰ´«²¥Ê¼þ£¬²»Í¬µÄÓ¦ÓõÄ
Handler ½ÚµãµÄ¹¦ÄÜÒ²²»Í¬£¬Í¨³£Çé¿öÏ£¬ÍùÍù »á¿ª·¢±à½âÂë Hanlder ÓÃÓÚÏûÏ¢µÄ±à½âÂ룬Ëü¿ÉÒÔ½«ÍⲿµÄÐÒéÏûϢת»»³ÉÄÚ²¿
µÄ POJO ¶ÔÏó£¬ÕâÑùÉϲãÒµÎñ²àÖ»ÐèÒª¹ØÐÄ´¦ÀíÒµÎñÂß¼¼´¿É£¬²»ÐèÒª¸ÐÖªµ×²ã µÄÐÒé²îÒìºÍÏß³ÌÄ£ÐͲîÒ죬ʵÏÖÁ˼ܹ¹²ãÃæµÄ·Ö²ã¸ôÀë¡£
µÚÈý²ã£ºÒµÎñÂß¼´¦Àí²ã£¬¿ÉÒÔ·ÖΪÁ½Àࣺ
1.´¿´âµÄÒµÎñÂß¼ ´¦Àí£¬ÀýÈç¶©µ¥´¦Àí¡£
2.Ó¦ÓòãÐÒé¹ÜÀí£¬ÀýÈçHTTPÐÒé¡¢FTPÐÒéµÈ¡£
½ÓÏÂÀ´£¬ÎÒ´ÓÓ°ÏìͨÐÅÐÔÄܵÄÈý¸ö·½Ã棨I/OÄ£ÐÍ¡¢Ï̵߳÷¶ÈÄ£ÐÍ¡¢ÐòÁл¯·½Ê½£©À´Ì¸Ì¸NettyµÄ¼Ü¹¹¡£
I/OÄ£ÐÍ
´«Í³Í¬²½×èÈûI/OģʽÈçÏÂͼËùʾ£º

ËüµÄ±×¶ËÓкࣺܶ
1.ÐÔÄÜÎÊÌ⣺һÁ¬½ÓÒ»Ïß³ÌÄ£Ð͵¼Ö·þÎñ¶ËµÄ²¢·¢½ÓÈëÊýºÍϵͳÍÌÍÂÁ¿Êܵ½¼«´óÏÞÖÆ£»
2.¿É¿¿ÐÔÎÊÌ⣺ÓÉÓÚI/O²Ù×÷²ÉÓÃͬ²½×èÈûģʽ£¬µ±ÍøÂçÓµÈû»òÕßͨÐŶԶ˴¦Àí»ºÂý»áµ¼ÖÂI/OÏ̱߳»¹Òס£¬×èÈûʱ¼äÎÞ·¨Ô¤²â£»
3.¿Éά»¤ÐÔÎÊÌ⣺I/OÏß³ÌÊýÎÞ·¨ÓÐЧ¿ØÖÆ¡¢×ÊÔ´ÎÞ·¨ÓÐЧ¹²Ïí£¨¶àÏ̲߳¢·¢ÎÊÌ⣩£¬ÏµÍ³¿Éά»¤ÐԲ
¼¸ÖÖI/OÄ£Ð͵ŦÄܺÍÌØÐԶԱȣº

NettyµÄI/OÄ£ÐÍ»ùÓÚ·Ç×èÈûI/OʵÏÖ£¬µ×²ãÒÀÀµµÄÊÇJDK NIO¿ò¼ÜµÄSelector¡£
SelectorÌṩѡÔñÒѾ¾ÍÐ÷µÄÈÎÎñµÄÄÜÁ¦¡£¼òµ¥À´½²£¬Selector»á²»¶ÏµØÂÖѯע²áÔÚÆäÉϵÄChannel£¬Èç¹ûij¸öChannelÉÏÃæÓÐеÄTCPÁ¬½Ó½ÓÈë¡¢¶ÁºÍдʼþ£¬Õâ¸öChannel¾Í´¦ÓÚ¾ÍÐ÷״̬£¬»á±»SelectorÂÖѯ³öÀ´£¬È»ºóͨ¹ýSelectionKey¿ÉÒÔ»ñÈ¡¾ÍÐ÷ChannelµÄ¼¯ºÏ£¬½øÐкóÐøµÄI/O²Ù×÷¡£
Ò»¸ö¶à·¸´ÓÃÆ÷Selector¿ÉÒÔͬʱÂÖѯ¶à¸öChannel£¬ÓÉÓÚJDK1.5_update10°æ±¾£¨+£©Ê¹ÓÃÁËepoll()´úÌæ´«Í³µÄselectʵÏÖ£¬ËùÒÔËü²¢Ã»ÓÐ×î´óÁ¬½Ó¾ä±ú1024/2048µÄÏÞÖÆ¡£ÕâÒ²¾ÍÒâζ×ÅÖ»ÐèÒªÒ»¸öÏ̸߳ºÔðSelectorµÄÂÖѯ£¬¾Í¿ÉÒÔ½ÓÈë³ÉǧÉÏÍòµÄ¿Í»§¶Ë£¬ÕâȷʵÊǸö·Ç³£¾Þ´óµÄ¼¼Êõ½ø²½¡£
ʹÓ÷Ç×èÈûI/OÄ£ÐÍÖ®ºó£¬Netty½â¾öÁË´«Í³Í¬²½×èÈûI/O´øÀ´µÄÐÔÄÜ¡¢ÍÌÍÂÁ¿ºÍ¿É¿¿ÐÔÎÊÌâ¡£
Ï̵߳÷¶ÈÄ£ÐÍ
³£ÓõÄReactorÏß³ÌÄ£ÐÍÓÐÈýÖÖ£¬·Ö±ðÈçÏ£º
1.Reactorµ¥Ïß³ÌÄ£ÐÍ£ºReactorµ¥Ïß³ÌÄ£ÐÍ£¬Ö¸µÄÊÇËùÓеÄI/O²Ù×÷¶¼ÔÚͬһ¸öNIOÏß³ÌÉÏÃæÍê³É¡£¶ÔÓÚһЩСÈÝÁ¿Ó¦Óó¡¾°£¬¿ÉÒÔʹÓõ¥Ïß³ÌÄ£ÐÍ¡£
2.Reactor¶àÏß³ÌÄ£ÐÍ£ºRector¶àÏß³ÌÄ£ÐÍÓëµ¥Ïß³ÌÄ£ÐÍ×î´óµÄÇø±ð¾ÍÊÇÓÐÒ»×éNIOÏ̴߳¦ÀíI/O²Ù×÷¡£Ö÷ÒªÓÃÓڸ߲¢·¢¡¢´óÒµÎñÁ¿³¡¾°¡£
3.Ö÷´ÓReactor¶àÏß³ÌÄ£ÐÍ£ºÖ÷´ÓReactorÏß³ÌÄ£Ð͵ÄÌØµãÊÇ·þÎñ¶ËÓÃÓÚ½ÓÊÕ¿Í»§¶ËÁ¬½ÓµÄ²»ÔÙÊǸö1¸öµ¥¶ÀµÄNIOỊ̈߳¬¶øÊÇÒ»¸ö¶ÀÁ¢µÄNIOÏ̳߳ء£ÀûÓÃÖ÷´ÓNIOÏß³ÌÄ£ÐÍ£¬¿ÉÒÔ½â¾ö1¸ö·þÎñ¶Ë¼àÌýÏß³ÌÎÞ·¨ÓÐЧ´¦ÀíËùÓпͻ§¶ËÁ¬½ÓµÄÐÔÄܲ»×ãÎÊÌâ¡£
ÊÂʵÉÏ£¬NettyµÄÏß³ÌÄ£ÐͲ¢·Ç¹Ì¶¨²»±ä£¬Í¨¹ýÔÚÆô¶¯¸¨ÖúÀàÖд´½¨²»Í¬µÄEventLoopGroupʵÀý²¢Í¨¹ýÊʵ±µÄ²ÎÊýÅäÖ㬾ͿÉÒÔÖ§³ÖÉÏÊöÈýÖÖReactorÏß³ÌÄ£ÐÍ¡£
ÔÚ´ó¶àÊý³¡¾°Ï£¬²¢ÐжàÏ̴߳¦Àí¿ÉÒÔÌáÉýϵͳµÄ²¢·¢ÐÔÄÜ¡£µ«ÊÇ£¬Èç¹û¶ÔÓÚ¹²Ïí×ÊÔ´µÄ²¢·¢·ÃÎÊ´¦Àí²»µ±£¬»á´øÀ´ÑÏÖØµÄËø¾ºÕù£¬Õâ×îÖջᵼÖÂÐÔÄܵÄϽµ¡£ÎªÁ˾¡¿ÉÄܵıÜÃâËø¾ºÕù´øÀ´µÄÐÔÄÜËðºÄ£¬¿ÉÒÔͨ¹ý´®Ðл¯Éè¼Æ£¬¼´ÏûÏ¢µÄ´¦Àí¾¡¿ÉÄÜÔÚͬһ¸öÏß³ÌÄÚÍê³É£¬ÆÚ¼ä²»½øÐÐÏß³ÌÇл»£¬ÕâÑù¾Í±ÜÃâÁ˶àÏ߳̾ºÕùºÍͬ²½Ëø¡£
ΪÁ˾¡¿ÉÄÜÌáÉýÐÔÄÜ£¬Netty²ÉÓÃÁË´®ÐÐÎÞËø»¯Éè¼Æ£¬ÔÚI/OÏß³ÌÄÚ²¿½øÐд®ÐвÙ×÷£¬±ÜÃâ¶àÏ߳̾ºÕùµ¼ÖµÄÐÔÄÜϽµ¡£±íÃæÉÏ¿´£¬´®Ðл¯Éè¼ÆËÆºõCPUÀûÓÃÂʲ»¸ß£¬²¢·¢³Ì¶È²»¹»¡£µ«ÊÇ£¬Í¨¹ýµ÷ÕûNIOÏ̳߳صÄÏ̲߳ÎÊý£¬¿ÉÒÔͬʱÆô¶¯¶à¸ö´®Ðл¯µÄÏ̲߳¢ÐÐÔËÐУ¬ÕâÖÖ¾Ö²¿ÎÞËø»¯µÄ´®ÐÐÏß³ÌÉè¼ÆÏà±ÈÒ»¸ö¶ÓÁÐ-¶à¸ö¹¤×÷Ïß³ÌÄ£ÐÍÐÔÄܸüÓÅ¡£

ÐòÁл¯·½Ê½
Ó°ÏìÐòÁл¯ÐÔÄܵĹؼüÒòËØ×ܽáÈçÏ£º
1.ÐòÁл¯ºóµÄÂëÁ÷´óС£¨ÍøÂç´ø¿íÕ¼Óã©
2.ÐòÁл¯&·´ÐòÁл¯µÄÐÔÄÜ£¨CPU×ÊÔ´Õ¼Óã©
3.²¢·¢µ÷ÓõÄÐÔÄܱíÏÖ£ºÎȶ¨ÐÔ¡¢ÏßÐÔÔö³¤¡¢Å¼ÏÖµÄʱÑÓë´ÌµÈ
¶ÔJavaÐòÁл¯ºÍ¶þ½øÖƱàÂë·Ö±ð½øÐÐÐÔÄܲâÊÔ£¬±àÂë100Íò´Î£¬²âÊÔ½á¹û±íÃ÷£ºJavaÐòÁл¯µÄÐÔÄÜÖ»Óжþ½øÖƱàÂëµÄ6.17%×óÓÒ¡£

NettyĬÈÏÌṩÁ˶ÔGoogle ProtobufµÄÖ§³Ö£¬Í¨¹ýÀ©Õ¹NettyµÄ±à½âÂë½Ó¿Ú£¬Óû§¿ÉÒÔʵÏÖÆäËüµÄ¸ßÐÔÄÜÐòÁл¯¿ò¼Ü£¬ÀýÈçThriftµÄѹËõ¶þ½øÖƱà½âÂë¿ò¼Ü¡£
²»Í¬µÄÓ¦Óó¡¾°¶ÔÐòÁл¯¿ò¼ÜµÄÐèÇóÒ²²»Í¬£¬¶ÔÓÚ¸ßÐÔÄÜÓ¦Óó¡¾°NettyĬÈÏÌṩÁËGoogleµÄProtobuf¶þ½øÖÆÐòÁл¯¿ò¼Ü£¬Èç¹ûÓû§¶ÔÆäËü¶þ½øÖÆÐòÁл¯¿ò¼ÜÓÐÐèÇó£¬Ò²¿ÉÒÔ»ùÓÚNettyÌṩµÄ±à½âÂë¿ò¼ÜÀ©Õ¹ÊµÏÖ¡£
Netty¼Ü¹¹ÆÊÎöÖ®¿É¿¿ÐÔ
NettyÃæÁٵĿɿ¿ÐÔÌôÕ½£º
1.×÷ΪRPC¿ò¼ÜµÄ»ù´¡ÍøÂçͨÐÅ¿ò¼Ü£¬Ò»µ©¹ÊÕϽ«µ¼ÖÂÎÞ·¨½øÐÐÔ¶³Ì·þÎñ£¨½Ó¿Ú£©µ÷Óá£
2.×÷ΪӦÓòãÐÒéµÄ»ù´¡Í¨ÐÅ¿ò¼Ü£¬Ò»µ©¹ÊÕϽ«µ¼ÖÂÓ¦ÓÃÐÒéÕ»ÎÞ·¨Õý³£¹¤×÷¡£
3.ÍøÂç»·¾³¸´ÔÓ£¨ÀýÈçÊÖÓλòÕßÍÆËÍ·þÎñµÄGSM/3G/WIFIÍøÂ磩£¬¹ÊÕϲ»¿É±ÜÃ⣬ҵÎñÈ´²»ÄÜÖжϡ£
´ÓÓ¦Óó¡¾°¿´£¬NettyÊÇ»ù´¡µÄͨÐÅ¿ò¼Ü£¬Ò»µ©³öÏÖBug£¬ÇáÔòÐèÒªÖØÆôÓ¦Óã¬ÖØÔò¿ÉÄܵ¼ÖÂÕû¸öÒµÎñÖжϡ£ËüµÄ¿É¿¿ÐÔ»áÓ°ÏìÕû¸öÒµÎñ¼¯ÈºµÄÊý¾ÝͨÐźͽ»»»£¬ÔÚµ±½ñÒÔ·Ö²¼Ê½ÎªÖ÷µÄÈí¼þ¼Ü¹¹ÌåϵÖУ¬Í¨ÐÅÖжϾÍÒâζ×ÅÕû¸öÒµÎñÖжϣ¬·Ö²¼Ê½¼Ü¹¹Ï¶ÔͨÐŵĿɿ¿ÐÔÒªÇó·Ç³£¸ß¡£
´ÓÔËÐл·¾³¿´£¬Netty»áÃæÁÙ¶ñÁÓµÄÍøÂç»·¾³£¬Õâ¾ÍÒªÇóËü×ÔÉíµÄ¿É¿¿ÐÔÒª×ã¹»ºÃ£¬Æ½Ì¨Äܹ»½â¾öµÄ¿É¿¿ÐÔÎÊÌâÐèÒªÓÉNetty×ÔÉíÀ´½â¾ö£¬·ñÔò»áµ¼ÖÂÉϲãÓû§¹Ø×¢¹ý¶àµÄµ×²ã¹ÊÕÏ£¬Õ⽫½µµÍNettyµÄÒ×ÓÃÐÔ£¬Í¬Ê±Ôö¼ÓÓû§µÄ¿ª·¢ºÍÔËά³É±¾¡£
NettyµÄ¿É¿¿ÐÔÊÇÈç´ËÖØÒª£¬ËüµÄÈκιÊÕ϶¼¿ÉÄܻᵼÖÂÒµÎñÖжϣ¬ÃÉÊܾ޴óµÄ¾¼ÃËðʧ¡£Òò´Ë£¬NettyÔÚ°æ±¾µÄµü´úÖв»¶Ï¼ÓÈëеĿɿ¿ÐÔÌØÐÔÀ´Âú×ãÓû§ÈÕÒæÔö³¤µÄ¸ß¿É¿¿ºÍ½¡×³ÐÔÐèÇó¡£
Á´Â·ÓÐЧÐÔ¼ì²â
NettyÌṩµÄÐÄÌø¼ì²â»úÖÆ·ÖΪÈýÖÖ£º
1.¶Á¿ÕÏУ¬Á´Â·³ÖÐøÊ±¼ätûÓжÁÈ¡µ½ÈκÎÏûÏ¢£»
2.д¿ÕÏУ¬Á´Â·³ÖÐøÊ±¼ätûÓз¢ËÍÈκÎÏûÏ¢£»
3.¶Áд¿ÕÏУ¬Á´Â·³ÖÐøÊ±¼ätûÓнÓÊÕ»òÕß·¢ËÍÈκÎÏûÏ¢¡£

µ±ÍøÂç·¢Éúµ¥Í¨¡¢Á¬½Ó±»·À»ðǽHangס¡¢³¤Ê±¼äGC»òÕßͨÐÅÏ̷߳¢Éú·ÇÔ¤ÆÚÒ쳣ʱ£¬»áµ¼ÖÂÁ´Â·²»¿ÉÓÃÇÒ²»Ò×±»¼°Ê±·¢ÏÖ¡£ÌرðÊÇÒì³£·¢ÉúÔÚÁ賿ҵÎñµÍ¹ÈÆÚ¼ä£¬µ±Ô糿ҵÎñ¸ß·åÆÚµ½À´Ê±£¬ÓÉÓÚÁ´Â·²»¿ÉÓûᵼÖÂ˲¼äµÄ´óÅúÁ¿ÒµÎñʧ°Ü»òÕß³¬Ê±£¬Õ⽫¶ÔϵͳµÄ¿É¿¿ÐÔ²úÉúÖØ´óµÄÍþв¡£
´Ó¼¼Êõ²ãÃæ¿´£¬Òª½â¾öÁ´Â·µÄ¿É¿¿ÐÔÎÊÌ⣬±ØÐëÖÜÆÚÐԵĶÔÁ´Â·½øÐÐÓÐЧÐÔ¼ì²â¡£Ä¿Ç°×îÁ÷ÐкÍͨÓõÄ×ö·¨¾ÍÊÇÐÄÌø¼ì²â¡£
ÐÄÌø¼ì²â»úÖÆ·ÖΪÈý¸ö²ãÃæ£º
1.TCP²ãÃæµÄÐÄÌø¼ì²â£¬¼´TCPµÄKeep-Alive»úÖÆ£¬ËüµÄ×÷ÓÃÓòÊÇÕû¸öTCPÐÒéÕ»£»
2.ÐÒé²ãµÄÐÄÌø¼ì²â£¬Ö÷Òª´æÔÚÓÚ³¤Á¬½ÓÐÒéÖС£ÀýÈçSMPPÐÒ飻
3.Ó¦ÓòãµÄÐÄÌø¼ì²â£¬ËüÖ÷ÒªÓɸ÷ÒµÎñ²úƷͨ¹ýÔ¼¶¨·½Ê½¶¨Ê±¸ø¶Ô·½·¢ËÍÐÄÌøÏûϢʵÏÖ¡£
ÐÄÌø¼ì²âµÄÄ¿µÄ¾ÍÊÇÈ·Èϵ±Ç°Á´Â·¿ÉÓ㬶Է½»î×Ų¢ÇÒÄܹ»Õý³£½ÓÊպͷ¢ËÍÏûÏ¢¡£×öΪ¸ß¿É¿¿µÄNIO¿ò¼Ü£¬NettyÒ²ÌṩÁË»ùÓÚÁ´Â·¿ÕÏеÄÐÄÌø¼ì²â»úÖÆ£º
1.¶Á¿ÕÏУ¬Á´Â·³ÖÐøÊ±¼ätûÓжÁÈ¡µ½ÈκÎÏûÏ¢£»
2.д¿ÕÏУ¬Á´Â·³ÖÐøÊ±¼ätûÓз¢ËÍÈκÎÏûÏ¢£»
3.¶Áд¿ÕÏУ¬Á´Â·³ÖÐøÊ±¼ätûÓнÓÊÕ»òÕß·¢ËÍÈκÎÏûÏ¢¡£
Á÷Á¿ÕûÐÎ
Á÷Á¿ÕûÐΣ¨Traffic Shaping£©ÊÇÒ»ÖÖÖ÷¶¯µ÷ÕûÁ÷Á¿Êä³öËÙÂʵĴëÊ©¡£NettyµÄÁ÷Á¿ÕûÐÎÓÐÁ½¸ö×÷Óãº
1.·ÀÖ¹ÓÉÓÚÉÏÏÂÓÎÍøÔªÐÔÄܲ»¾ùºâµ¼ÖÂÏÂÓÎÍøÔª±»Ñ¹¿å£¬ÒµÎñÁ÷³ÌÖжϣ»
2.·ÀÖ¹ÓÉÓÚͨÐÅÄ£¿é½ÓÊÕÏûÏ¢¹ý¿ì£¬ºó¶ËÒµÎñÏ̴߳¦Àí²»¼°Ê±µ¼Öµġ°³ÅËÀ¡±ÎÊÌâ¡£
Á÷Á¿ÕûÐεÄÔÀíʾÒâͼÈçÏ£º

Á÷Á¿ÕûÐΣ¨Traffic Shaping£©ÊÇÒ»ÖÖÖ÷¶¯µ÷ÕûÁ÷Á¿Êä³öËÙÂʵĴëÊ©¡£Ò»¸öµäÐÍÓ¦ÓÃÊÇ»ùÓÚÏÂÓÎÍøÂç½áµãµÄTPÖ¸±êÀ´¿ØÖƱ¾µØÁ÷Á¿µÄÊä³ö¡£Á÷Á¿ÕûÐÎÓëÁ÷Á¿¼à¹ÜµÄÖ÷񻂿±ðÔÚÓÚ£¬Á÷Á¿ÕûÐζÔÁ÷Á¿¼à¹ÜÖÐÐèÒª¶ªÆúµÄ±¨ÎĽøÐлº´æ¡ª¡ªÍ¨³£Êǽ«ËüÃÇ·ÅÈ뻺³åÇø»ò¶ÓÁÐÄÚ£¬Ò²³ÆÁ÷Á¿ÕûÐΣ¨Traffic
Shaping£¬¼ò³ÆTS£©¡£µ±ÁîÅÆÍ°ÓÐ×ã¹»µÄÁîÅÆÊ±£¬ÔÙ¾ùÔȵÄÏòÍâ·¢ËÍÕâЩ±»»º´æµÄ±¨ÎÄ¡£Á÷Á¿ÕûÐÎÓëÁ÷Á¿¼à¹ÜµÄÁíÒ»Çø±ðÊÇ£¬ÕûÐοÉÄÜ»áÔö¼ÓÑÓ³Ù£¬¶ø¼à¹Ü¼¸ºõ²»ÒýÈë¶îÍâµÄÑÓ³Ù¡£
NettyÖ§³ÖÁ½ÖÖÁ÷Á¿ÕûÐÎģʽ£º
1.È«¾ÖÁ÷Á¿ÕûÐΣºÈ«¾ÖÁ÷Á¿ÕûÐεÄ×÷Ó÷¶Î§Êǽø³Ì¼¶µÄ£¬ÎÞÂÛÄã´´½¨Á˶àÉÙ¸öChannel£¬ËüµÄ×÷ÓÃÓòÕë¶ÔËùÓеÄChannel¡£Óû§¿ÉÒÔͨ¹ý²ÎÊýÉèÖ㺱¨ÎĵĽÓÊÕËÙÂÊ¡¢±¨Îĵķ¢ËÍËÙÂÊ¡¢ÕûÐÎÖÜÆÚ¡£
2.Á´Â·¼¶Á÷Á¿ÕûÐΣºµ¥Á´Â·Á÷Á¿ÕûÐÎÓëÈ«¾ÖÁ÷Á¿ÕûÐεÄ×î´óÇø±ð¾ÍÊÇËüÒÔµ¥¸öÁ´Â·Îª×÷ÓÃÓò£¬¿ÉÒÔ¶Ô²»Í¬µÄÁ´Â·ÉèÖò»Í¬µÄÕûÐβßÂÔ¡£
ÓÅÑÅÍ£»ú
NettyµÄÓÅÑÅÍ£»úÈý²¿Çú£º
1.²»ÔÙ½ÓÊÕÐÂÏûÏ¢
2.Í˳öǰµÄÔ¤´¦Àí²Ù×÷
3.×ÊÔ´µÄÊͷŲÙ×÷

JavaµÄÓÅÑÅÍ£»úͨ³£Í¨¹ý×¢²áJDKµÄShutdownHookÀ´ÊµÏÖ£¬µ±ÏµÍ³½ÓÊÕµ½Í˳öÖ¸Áîºó£¬Ê×Ïȱê¼Çϵͳ´¦ÓÚÍ˳ö״̬£¬²»ÔÙ½ÓÊÕеÄÏûÏ¢£¬È»ºó½«»ýѹµÄÏûÏ¢´¦ÀíÍ꣬×îºóµ÷ÓÃ×ÊÔ´»ØÊÕ½Ó¿Ú½«×ÊÔ´Ïú»Ù£¬×îºó¸÷Ïß³ÌÍ˳öÖ´ÐС£
ͨ³£ÓÅÑÅÍ˳öÐèÒªÓг¬Ê±¿ØÖÆ»úÖÆ£¬ÀýÈç30S£¬Èç¹ûµ½´ï³¬Ê±Ê±¼äÈÔȻûÓÐÍê³ÉÍ˳öǰµÄ×ÊÔ´»ØÊյȲÙ×÷£¬ÔòÓÉÍ£»ú½Å±¾Ö±½Óµ÷ÓÃkill
-9 pid£¬Ç¿ÖÆÍ˳ö¡£
ÔÚʵ¼ÊÏîÄ¿ÖУ¬Netty×÷Ϊ¸ßÐÔÄܵÄÒì²½NIOͨÐÅ¿ò¼Ü£¬ÍùÍùÓÃ×÷»ù´¡Í¨ÐÅ¿ò¼Ü¸ºÔð¸÷ÖÖÐÒéµÄ½ÓÈë¡¢½âÎöºÍµ÷¶ÈµÈ£¬ÀýÈçÔÚRPCºÍ·Ö²¼Ê½·þÎñ¿ò¼ÜÖУ¬ÍùÍù»áʹÓÃNetty×÷ΪÄÚ²¿Ë½ÓÐÐÒéµÄ»ù´¡Í¨ÐÅ¿ò¼Ü¡£
µ±Ó¦Óýø³ÌÓÅÑÅÍ˳öʱ£¬×÷ΪͨÐÅ¿ò¼ÜµÄNettyÒ²ÐèÒªÓÅÑÅÍ˳ö£¬Ö÷ÒªÔÒòÈçÏ£º
¾¡¿ìµÄÊÍ·ÅNIOÏ̡߳¢¾ä±úµÈ×ÊÔ´£»
Èç¹ûʹÓÃflush×öÅúÁ¿ÏûÏ¢·¢ËÍ£¬ÐèÒª½«»ýÔÜÔÚ·¢ËͶÓÁÐÖеĴý·¢ËÍÏûÏ¢·¢ËÍÍê³É£»
ÕýÔÚwrite»òÕßreadµÄÏûÏ¢£¬ÐèÒª¼ÌÐø´¦Àí£»
ÉèÖÃÔÚNioEventLoopÏ̵߳÷¶ÈÆ÷ÖеĶ¨Ê±ÈÎÎñ£¬ÐèÒªÖ´ÐлòÕßÇåÀí¡£
Netty¼Ü¹¹ÆÊÎöÖ®°²È«ÐÔ
NettyÃæÁٵݲȫÌôÕ½£º
¶ÔµÚÈý·½¿ª·Å
×÷ΪӦÓòãÐÒéµÄ»ù´¡Í¨ÐÅ¿ò¼Ü

°²È«Íþв³¡¾°·ÖÎö£º
¶ÔµÚÈý·½¿ª·ÅµÄͨÐÅ¿ò¼Ü£ºÈç¹ûʹÓÃNetty×öRPC¿ò¼Ü»òÕß˽ÓÐÐÒéÕ»£¬RPC¿ò¼ÜÃæÏò·ÇÊÚÐŵĵÚÈý·½¿ª·Å£¬ÀýÈ罫ÄÚ²¿µÄһЩÄÜÁ¦Í¨¹ý·þÎñ¶ÔÍ⿪·Å³öÈ¥£¬´Ëʱ¾ÍÐèÒª½øÐа²È«ÈÏÖ¤£¬Èç¹û¿ª·ÅµÄÊǹ«ÍøIP£¬¶ÔÓÚ°²È«ÐÔÒªÇó·Ç³£¸ßµÄһЩ·þÎñ£¬ÀýÈçÔÚÏßÖ§¸¶¡¢¶©¹ºµÈ£¬ÐèҪͨ¹ýSSL/TLS½øÐÐͨÐÅ¡£
Ó¦ÓòãÐÒéµÄ°²È«ÐÔ¡£×÷Ϊ¸ßÐÔÄÜ¡¢Ò첽ʼþÇý¶¯µÄNIO¿ò¼Ü£¬Netty·Ç³£ÊʺϹ¹½¨ÉϲãµÄÓ¦ÓòãÐÒé¡£ÓÉÓÚ¾ø´ó¶àÊýÓ¦ÓòãÐÒé¶¼Êǹ«Óеģ¬ÕâÒâζ×ŵײãµÄNettyÐèÒªÏòÉϲãÌṩͨÐŲãµÄ°²È«´«Ê书ÄÜ¡£
SSL/TLS
Netty°²È«´«ÊäÌØÐÔ£º
1.Ö§³ÖSSL V2ºÍV3
2.Ö§³ÖTLS
3.Ö§³ÖSSLµ¥ÏòÈÏÖ¤¡¢Ë«ÏòÈÏÖ¤ºÍµÚÈý·½CAÈÏÖ¤¡£
SSLµ¥ÏòÈÏÖ¤Á÷³ÌͼÈçÏ£º

Nettyͨ¹ýSslHandlerÌṩÁ˶ÔSSLµÄÖ§³Ö£¬ËüÖ§³ÖµÄSSLÐÒéÀàÐͰüÀ¨£ºSSL
V2¡¢SSL V3ºÍTLS¡£
µ¥ÏòÈÏÖ¤£ºµ¥ÏòÈÏÖ¤£¬¼´¿Í»§¶ËÖ»ÑéÖ¤·þÎñ¶ËµÄºÏ·¨ÐÔ£¬·þÎñ¶Ë²»ÑéÖ¤¿Í»§¶Ë¡£
Ë«ÏòÈÏÖ¤£ºÓëµ¥ÏòÈÏÖ¤²»Í¬µÄÊÇ·þÎñ¶ËÒ²ÐèÒª¶Ô¿Í»§¶Ë½øÐа²È«ÈÏÖ¤¡£Õâ¾ÍÒâζ×ſͻ§¶ËµÄ×ÔÇ©ÃûÖ¤ÊéÒ²ÐèÒªµ¼Èëµ½·þÎñ¶ËµÄÊý×ÖÖ¤Êé²Ö¿âÖС£
CAÈÏÖ¤£º»ùÓÚ×ÔÇ©ÃûµÄSSLË«ÏòÈÏÖ¤£¬Ö»Òª¿Í»§¶Ë»òÕß·þÎñ¶ËÐÞ¸ÄÁËÃÜÔ¿ºÍÖ¤Ê飬¾ÍÐèÒªÖØÐ½øÐÐÇ©ÃûºÍÖ¤Êé½»»»£¬ÕâÖÖµ÷ÊÔºÍά»¤¹¤×÷Á¿ÊǷdz£´óµÄ¡£Òò´Ë£¬ÔÚʵ¼ÊµÄÉÌÓÃϵͳÖÐÍùÍù»áʹÓõÚÈý·½CAÖ¤Êé°ä·¢»ú¹¹½øÐÐÇ©ÃûºÍÑéÖ¤¡£ÎÒÃǵÄä¯ÀÀÆ÷¾Í±£´æÁ˼¸¸ö³£ÓõÄCA_ROOT¡£Ã¿´ÎÁ¬½Óµ½ÍøÕ¾Ê±Ö»ÒªÕâ¸öÍøÕ¾µÄÖ¤ÊéÊǾ¹ýÕâЩCA_ROOTÇ©Ãû¹ýµÄ¡£¾Í¿ÉÒÔͨ¹ýÑéÖ¤ÁË¡£
¿ÉÀ©Õ¹µÄ°²È«ÌØÐÔ
ͨ¹ýNettyµÄÀ©Õ¹ÌØÐÔ£¬¿ÉÒÔ×Ô¶¨Ò尲ȫ²ßÂÔ£º
1.IPµØÖ·ºÚÃûµ¥»úÖÆ
2.½ÓÈëÈÏÖ¤
3.Ãô¸ÐÐÅÏ¢¼ÓÃÜ»òÕß¹ýÂË»úÖÆ
IPµØÖ·ºÚÃûµ¥ÊDZȽϳ£ÓõÄÈõ°²È«±£»¤²ßÂÔ£¬ËüµÄÌØµã¾ÍÊÇ·þÎñ¶ËÔÚÓë¿Í»§¶ËͨÐŵĹý³ÌÖУ¬¶Ô¿Í»§¶ËµÄIPµØÖ·½øÐÐУÑ飬Èç¹û·¢ÏÖ¶Ô·½IPÔÚºÚÃûµ¥ÁбíÖУ¬Ôò¾Ü¾øÓëÆäͨÐÅ£¬¹Ø±ÕÁ´Â·¡£
½ÓÈëÈÏÖ¤²ßÂԷdz£¶à£¬Í¨³£ÊǽÏÇ¿µÄ°²È«ÈÏÖ¤²ßÂÔ£¬ÀýÈç»ùÓÚÓû§Ãû+ÃÜÂëµÄÈÏÖ¤£¬ÈÏÖ¤ÄÚÈÝÍùÍù²ÉÓüÓÃܵķ½Ê½£¬ÀýÈçBase64+AESµÈ¡£
Netty¼Ü¹¹ÆÊÎöÖ®À©Õ¹ÐÔ
ͨ¹ýNettyµÄÀ©Õ¹ÌØÐÔ£¬¿ÉÒÔ×Ô¶¨Ò尲ȫ²ßÂÔ£º
1.Ïß³ÌÄ£ÐÍ¿ÉÀ©Õ¹
2.ÐòÁл¯·½Ê½¿ÉÀ©Õ¹
3.ÉϲãÐÒéÕ»¿ÉÀ©Õ¹
4.Ìṩ´óÁ¿µÄÍøÂçʼþÇÐÃæ£¬·½±ãÓû§¹¦ÄÜÀ©Õ¹
NettyµÄ¼Ü¹¹¿ÉÀ©Õ¹ÐÔÉè¼ÆÀíÄîÈçÏ£º
5.ÅжÏÀ©Õ¹µã£¬ÊÂÏÈÔ¤ÁôÏà¹ØÀ©Õ¹½Ó¿Ú£¬¸øÓû§¶þ´Î¶¨ÖƺÍÀ©Õ¹Ê¹Óã»
6.Ö÷Òª¹¦Äܵ㶼»ùÓÚ½Ó¿Ú±à³Ì£¬·½±ãÓû§¶¨ÖƺÍÀ©Õ¹¡£
¾«²ÊÎÊ´ð
ÎÊ£º¾ÝÎÒ֮ǰÁ˽⵽£¬JavaµÄNIO selectorµ×²ãÔÚWindowsϵÄʵÏÖÊÇÆðÁ½¸öËæ»ú¶Ë¿Ú»¥ÁªÀ´¼à²âÁ¬½Ó»ò¶Áдʼþ£¬ÔÚLinuxÉÏÊÇÀûÓùܵÀʵÏֵģ»ÎÒÓÐÓöµ½¹ýÕâÑùµÄÐèÇó£¬ÐèÒªÕ¼Óúܶà¸ö¹Ì¶¨¶Ë¿Ú×ö·þÎñ¶Ë£¬Èç¹ûÔÚWindowsÏ£¬ÀûÓÃNIO¿ò¼Ü£¨Mina»òNetty£©¾ÍÓпÉÄÜ»áÔì³É¶Ë¿Ú³åÍ»£¬ÕâÖÖÇé¿öÓÐʲôºÃµÄ½â¾ö·½°¸Âð£¿
Äã˵µÄÎÊÌâȷʵ´æÔÚ£¬LinuxʹÓÃPipeʵÏÖÍøÂç¼àÌý£¬WindowsÒªÆô¶¯¶Ë¿Ú¡£Ä¿Ç°Ã»ÓиüºÃµÄ°ì·¨£¬½¨ÒéµÄ·½Ê½ÊÇ×÷Ϊ·þÎñ¶ËµÄ¶Ë¿Ú¿ÉÒԹ滮һ¸ö·¶Î§£¬È»ºó¸ù¾Ý½ÚµãºÍ½ø³ÌÐÅÏ¢¶¯Ì¬Éú³É£¬Èç¹û·¢Ïֶ˿ڳåÍ»£¬¿ÉÒÔÔڹ滮·¶Î§ÄÚ»ùÓÚËã·¨ÖØÐÂÉú³ÉÒ»¸öеĶ˿ڡ£
ÎÊ£ºÇëÎÒ£¬ÎÒÏÖÔÚ½«SpringÓëNetty×öÁËÕûºÏ£¬Ê¹ÓÃSpringµÄService¿ªÆô
NettyÖ÷Ị̈߳¬µ«ÊÇÍ£Ö¹Õû¸öÔËÐÐÈÝÆ÷µÄʱºò£¬NettyµÄTCP Server¶Ë¿Ú²»ÄÜÊÍ·Å£¿Í˳ö´¦Àíʱ£¬ÓÐʲôºÃµÄ°ì·¨ÊÍ·ÅNetty
Server¶Ë¿Úô£¿
ʵ¼ÊÉÏ£¬ÓÉËÀÆðNetty Ö÷Ï̲߳¢²»ÖØÒª¡£ÎÒÃÇÐèÒª×öµÄ¾ÍÊǵ±Ó¦ÓÃÈÝÆ÷Í˳öµÄʱºò£¨Spring
ContextÏú»Ù£©£¬ÔÚÍ˳ö֮ǰµ÷ÓÃNetty µÄÓÅÑÅÍ˳ö½Ó¿Ú¼´¿ÉʵÏֶ˿ڡ¢NIOÏß³Ì×ÊÔ´µÄÊÍ·Å¡£Çë²Î¿¼ÕâÆªÎÄÕ£ºhttp://www.infoq.com/cn/articles/netty-elegant-exit-mechanism-and-principles
ÎÊ£ºÊʺÏÓÃNettyдWebͨÐÅô?
Netty²»ÊÇWeb¿ò¼Ü£¬ÎÞ·¨½âÎöJSP¡¢HTML¡¢JSµÈ£¬µ«ÊÇËü¿ÉÒÔ×öWeb
ͨÐÅ£¬ÀýÈç¿ÉÒÔʹÓÃNettyÖØÐ´TomcatµÄHTTP/HTTPS ͨÐÅÐÒéÕ»¡£
ÎÊ£ºÄܲ»Äܽ²½âÒ»ÏÂNettyµÄ´®ÐÐÎÞËø»¯Éè¼Æ£¬ÈçºÎÔÚ´®ÐкͲ¢ÐÐÖдﵽ×îÓÅ£¿
ΪÁ˾¡¿ÉÄÜÌáÉýÐÔÄÜ£¬Netty²ÉÓÃÁË´®ÐÐÎÞËø»¯Éè¼Æ£¬ÔÚIOÏß³ÌÄÚ²¿½øÐд®ÐвÙ×÷£¬±ÜÃâ¶àÏ߳̾ºÕùµ¼ÖµÄÐÔÄÜϽµ¡£±íÃæÉÏ¿´£¬´®Ðл¯Éè¼ÆËÆºõCPUÀûÓÃÂʲ»¸ß£¬²¢·¢³Ì¶È²»¹»¡£µ«ÊÇ£¬Í¨¹ýµ÷ÕûNIOÏ̳߳صÄÏ̲߳ÎÊý£¬¿ÉÒÔͬʱÆô¶¯¶à¸ö´®Ðл¯µÄÏ̲߳¢ÐÐÔËÐУ¬ÕâÖÖ¾Ö²¿ÎÞËø»¯µÄ´®ÐÐÏß³ÌÉè¼ÆÏà±ÈÒ»¸ö¶ÓÁÐ-¶à¸ö¹¤×÷Ïß³ÌÄ£ÐÍÐÔÄܸüÓÅ¡£NettyµÄNioEventLoop¶ÁÈ¡µ½ÏûÏ¢Ö®ºó£¬Ö±½Óµ÷ÓÃChannelPipelineµÄfireChannelRead(Object
msg)£¬Ö»ÒªÓû§²»Ö÷¶¯Çл»Ị̈߳¬Ò»Ö±»áÓÉNioEventLoopµ÷Óõ½Óû§µÄHandler£¬ÆÚ¼ä²»½øÐÐÏß³ÌÇл»£¬ÕâÖÖ´®Ðл¯´¦Àí·½Ê½±ÜÃâÁ˶àÏ̲߳Ù×÷µ¼ÖµÄËøµÄ¾ºÕù£¬´ÓÐÔÄܽǶȿ´ÊÇ×îÓŵġ£
|