Ê×Ò³
ѧϰ
»î¶¯
רÇø
¹¤¾ß
TVP
·¢²¼
¾«Ñ¡ÄÚÈÝ/¼¼ÊõÉçȺ/ÓŻݲúÆ·,¾¡ÔÚС³ÌÐò
Á¢¼´Ç°Íù

Nettyʵսʮһ֮ԤÖõÄChannelHandlerºÍ±à½âÂëÆ÷

NettyΪÐí¶àͨÓÃЭÒéÌṩÁ˱à½âÂëÆ÷ºÍ´¦ÀíÆ÷£¬¼¸ºõ¿ÉÒÔ¿ªÏä¼´Óã¬Õâ¼õÉÙÁËÄãÔÚÄÇЩÏ൱·±ËöµÄÊÂÎñÉϱ¾À´»á»¨·ÑµÄʱ¼äÓ뾫Á¦¡£ÎÒÃǽ«Ì½ÌÖÕâЩ¹¤¾ßÒÔ¼°ËüÃÇËù´øÀ´µÄºÃ´¦£¬ÆäÖаüÀ¨Netty¶ÔÓÚSSL/TLSºÍWebSocketµÄÖ§³Ö£¬ÒÔ¼°ÈçºÎ¼òµ¥µØͨ¹ýÊý¾ÝѹËõÀ´Ñ¹Õ¥HTTP£¬ÒÔ»ñÈ¡¸üºÃµÄÐÔÄÜ¡£

1¡¢Í¨¹ýSSL/TLS±£»¤NettyÓ¦ÓóÌÐò

SSLºÍTLSÕâÑùµÄ°²È«Ð­Ò飬ËüÃDzãµþÔÚÆäËûЭÒéÖ®ÉÏ£¬ÓÃÒÔʵÏÖÊý¾Ý°²È«¡£ÎÒÃÇÔÚ·ÃÎÊ°²È«ÍøվʱÓöµ½¹ýÕâЩЭÒ飬µ«ÊÇËüÃÇÒ²¿ÉÓÃÓÚÆäËû²»ÊÇ»ùÓÚHTTPµÄÓ¦ÓóÌÐò£¬È簲ȫSMTP£¨SMTPS£©Óʼþ·þÎñÆ÷ÉõÖÁÊǹØϵÐÍÊý¾Ý¿âϵͳ¡£

ÏÂͼչʾÁËʹÓÃSslHandlerµÄÊý¾ÝÁ÷ÒÔÏ´úÂëչʾÁËÈçºÎʹÓÃChannelInitializerÀ´½«SslHandlerÌí¼Óµ½ChannelPipelineÖС£

ÔÚ´ó¶àÊýÇé¿öÏ£¬SslHandler½«ÊÇChannelPipelineÖеĵÚÒ»¸öChannelHandler¡£ÕâÈ·±£ÁËÖ»ÓÐÔÚËùÓÐÆäËûµÄChannelHandler½«ËüÃǵÄÂß¼­Ó¦Óõ½Êý¾ÝÖ®ºó£¬²Å»á½øÐмÓÃÜ¡£

ÀýÈ磬ÔÚÎÕÊֽ׶Σ¬Á½¸ö½Úµã½«Ï໥ÑéÖ¤²¢ÇÒÉ̶¨Ò»ÖÖ¼ÓÃÜ·½Ê½¡£Äã¿ÉÒÔͨ¹ýÅäÖÃSslHandlerÀ´ÐÞ¸ÄËüµÄÐÐΪ£¬»òÕßÔÚSSL/TLSÎÕÊÖÒ»µ©Íê³ÉÖ®ºóÌṩ֪ͨ£¬ÎÕÊֽ׶ÎÍê³ÉÖ®ºó£¬ËùÓеÄÊý¾Ý¶¼½«»á±»¼ÓÃÜ¡£SSL/TLSÎÕÊÖ½«»á±»×Ô¶¯Ö´ÐС£

2¡¢¹¹½¨»ùÓÚNettyµÄHTTP/HTTPSÓ¦ÓóÌÐò

HTTP/HTTPSÊÇ×î³£¼ûµÄЭÒéÌ×¼þÖ®Ò»£¬²¢ÇÒËæ×ÅÖÇÄÜÊÖ»úµÄ³É¹¦£¬ËüµÄÓ¦ÓÃÒ²ÈÕÒæ¹ã·º£¬ÒòΪ¶ÔÓÚÈκι«Ë¾À´Ëµ£¬ÓµÓÐÒ»¸ö¿ÉÒÔ±»Òƶ¯É豸·ÃÎʵÄÍøÕ¾¼¸ºõÊDZØÐëµÄ¡£ÕâЩЭÒéÒ²±»ÓÃÓÚÆäËû·½Ãæ¡£

HTTPÊÇ»ùÓÚÇëÇó/ÏìӦģʽµÄ£º¿Í»§¶ËÏò·þÎñÆ÷·¢ËÍÒ»¸öHTTPÇëÇó£¬È»ºó·þÎñÆ÷½«»á·µ»ØÒ»¸öHTTPÏìÓ¦¡£NettyÌṩÁ˶àÖÖ±àÂëÆ÷ºÍ½âÂëÆ÷ÒÔ¼ò»¯¶ÔÕâ¸öЭÒéµÄʹÓá£

ÏÂͼ·Ö±ðչʾÁËÉú²úºÍÏû·ÑHTTPÇëÇóºÍHTTPÏìÓ¦µÄ·½·¨¡£

ÕýÈçÉÏͼËùʾ£¬Ò»¸öHTTPÇëÇó/ÏìÓ¦¿ÉÄÜÓɶà¸öÊý¾Ý²¿·Ö×é³É£¬²¢ÇÒËü×ÜÊÇÒÔÒ»¸öLastHttpContent²¿·Ö×÷Ϊ½áÊø¡£FullHttpRequestºÍFullHttpResponseÏûÏ¢ÊÇÌØÊâµÄ×ÓÀàÐÍ£¬·Ö±ð´ú±íÁËÍêÕûµÄÇëÇóºÍÏìÓ¦¡£ËùÓÐÀàÐ͵ÄHTTPÏûÏ¢¶¼ÊµÏÖHttpObject½Ó¿Ú¡£

ÒÔÏ´úÂëÖеÄHttpPipelineInitializerÀàչʾÁ˽«HTTPÖ§³ÖÌí¼Óµ½ÄãµÄÓ¦ÓóÌÐòʱ¶àô¼òµ¥¡ª¡ª¼¸ºõÖ»ÐèÒª½«ÕýÈ·µÄChannelHandlerÌí¼Óµ½ChannelPipelineÖС£

3¡¢¾ÛºÏHTTPÏûÏ¢

ÔÚChannelInitializer½«ChannelHandler°²×°µ½ChannelPipelineÖÐÖ®ºó£¬Äã±ã¿ÉÒÔ´¦Àí²»Í¬ÀàÐ͵ÄHttpObjectÏûÏ¢ÁË¡£µ«ÊÇÓÉÓÚHTTPµÄÇëÇóºÍÏìÓ¦¿ÉÄÜÓÉÐí¶à²¿·Ö×é³É£¬Òò´ËÄãÐèÒª¾ÛºÏËüÃÇÒÔÐγÉÍêÕûµÄÏûÏ¢¡£ÎªÁËÏû³ýÕâÏî·±ËöµÄÈÎÎñ£¬NettyÌṩÁËÒ»¸ö¾ÛºÏÆ÷£¬Ëü¿ÉÒÔ½«¶à¸öÏûÏ¢²¿·ÖºÏ²¢ÎªFullHttpRequest»òÕßFullHttpResponseÏûÏ¢¡£Í¨¹ýÕâÑùµÄ·½Ê½£¬Ä㽫×ÜÊÇ¿´µ½ÍêÕûµÄÏûÏ¢ÄÚÈÝ¡£

ÓÉÓÚÏûÏ¢·Ö¶ÎÐèÒª±»»º³å£¬Ö±µ½¿ÉÒÔת·¢Ò»¸öÍêÕûµÄÏûÏ¢¸øÏÂÒ»¸öChannelInboundHandler£¬ËùÒÔÕâ¸ö²Ù×÷ÓÐÇá΢µÄ¿ªÏú¡£ÆäËù´øÀ´µÄºÃ´¦±ãÊÇÄã²»±Ø¹ØÐÄÏûÏ¢ËéƬÁË¡£

ÒýÈëÕâÖÖ×Ô¶¯¾ÛºÏ»úÖÆÖ»²»¹ýÊÇÏòChannelPipelineÖÐÌí¼ÓÁíÍâÒ»¸öChannelHandler°ÕÁË¡£ÈçÒÔÏ´úÂëËùʾ¡£

4¡¢HTTPѹËõ

µ±Ê¹ÓÃHTTPʱ£¬½¨Ò鿪ÆôѹËõ¹¦ÄÜÒÔ¾¡¿ÉÄܶàµØ¼õÉÙ´«ÊäÊý¾ÝµÄ´óС¡£ËäȻѹËõ»á´øÀ´Ò»Ð©CPUʱÖÓÖÜÆÚÉϵĿªÏú£¬µ«ÊÇͨ³£À´ËµËü¶¼ÊÇÒ»¸öºÃÖ÷Ò⣬ÌرðÊǶÔÓÚÎı¾Êý¾ÝÀ´Ëµ¡£

NettyΪѹËõºÍ½âѹËõÌṩÁËChannelHandlerʵÏÖ£¬ËüÃÇͬʱ֧³ÖgzipºÍdeflate±àÂë¡£

HTTPÇëÇóµÄÍ·²¿ÐÅÏ¢£¬¿Í»§¶Ë¿ÉÒÔͨ¹ýÌṩÒÔÏÂÍ·²¿ÐÅÏ¢À´Ö¸Ê¾·þÎñÆ÷ËüËùÖ§³ÖµÄѹËõ¸ñʽ£º

Get /encrypted-area HTTP/1.1

Accept-Encoding:gzip,deflate

È»¶ø£¬ÐèҪעÒâµÄÊÇ£¬·þÎñÆ÷ûÓÐÒåÎñѹËõËüËù·¢Ë͵ÄÊý¾Ý¡£

ÒÔÏ´úÂëչʾÁËÒ»¸öÀý×Ó¡£

5¡¢Ê¹ÓÃHTTPS

ÒÔÏ´úÂëÏÔʾ£¬ÆôÓÃHTTPSÖ»ÐèÒª½«SslHandlerÌí¼Óµ½ChannelPipelineµÄChannelHandler×éºÏÖС£

ÒÔÉÏÀý×Ó£¬ËµÃ÷ÁËNettyµÄ¼Ü¹¹·½Ê½ÊÇÈçºÎ½«´úÂëÖØÓñäΪ¸Ü¸Ë×÷Óõġ£Ö»ÐèÒª¼òµ¥µØ½«Ò»¸öChannelHandlerÌí¼Óµ½ChannelPipelineÖУ¬±ã¿ÉÒÔÌṩһÏîÐµĹ¦ÄÜ£¬ÉõÖÁÏñ¼ÓÃÜÕâÑùÖØÒªµÄ¹¦Äܶ¼ÄÜÌṩ¡£

6¡¢WebSocket

WebSocket½â¾öÁËÒ»¸ö³¤ÆÚ´æÔÚµÄÎÊÌ⣺¼ÈÈ»µ×²ãµÄЭÒ飨HTTP£©ÊÇÒ»¸öÇëÇó/ÏìӦģʽµÄ½»»¥ÐòÁУ¬ÄÇôÈçºÎʵʱµØ·¢²¼ÐÅÏ¢£¿AJAXÌṩÁËÒ»¶¨³Ì¶ÈÉϵĸÄÉÆ£¬µ«ÊÇÊý¾ÝÁ÷ÈÔÈ»ÊÇÓÉ¿Í»§¶ËËù·¢Ë͵ÄÇëÇóÇý¶¯¡£

WebSocket¹æ·¶ÒÔ¼°ËüµÄʵÏÖ´ú±íÁ˶ÔÒ»ÖÖ¸ü¼ÓÓÐЧµÄ½â¾ö·½°¸µÄ³¢ÊÔ¡£¼òµ¥µØ˵£¬WebSocketÌṩÁË¡°ÔÚÒ»¸öµ¥¸öµÄTCPÁ¬½ÓÉÏÌṩ˫ÏòµÄͨÐÅ¡¤¡¤¡¤¡¤¡¤¡¤¡¤½áºÏWebSocketAPI¡¤¡¤¡¤¡¤¡¤ËüΪÍøÒ³ºÍÔ¶³Ì·þÎñÆ÷Ö®¼äµÄË«ÏòͨÐÅÌṩÁËÒ»ÖÖÌæ´úHTTPÂÖѯµÄ·½°¸¡£¡±

WebSocketÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äÌṩÁËÕæÕýµÄË«ÏòÊý¾Ý½»»»¡£WebSocketÏÖÔÚ¿ÉÒÔÓÃÓÚ´«ÊäÈÎÒâÀàÐ͵ÄÊý¾Ý£¬ºÜÏñÆÕͨµÄÌ×½Ó×Ö¡£

ÏÂͼ¸ø³öÁËWebSocketЭÒéµÄÒ»°ã¸ÅÄî¡£ÔÚÕâ¸ö³¡¾°Ï£¬Í¨ÐŽ«×÷ΪÆÕͨµÄHTTPЭÒ鿪ʼ£¬ËæºóÉý¼¶µ½Ë«ÏòµÄWebSocketЭÒé¡£

ÒªÏëÏòÄãµÄÓ¦ÓóÌÐòÖÐÌí¼Ó¶ÔÓÚWebSocketµÄÖ§³Ö£¬ÄãÐèÒª½«Êʵ±µÄ¿Í»§¶Ë»òÕß·þÎñÆ÷WebSocket ChannelHandlerÌí¼Óµ½ChannelPipelineÖС£Õâ¸öÀཫ´¦ÀíÓÉWebSocket¶¨ÒåµÄ³ÆΪ֡µÄÌØÊâÏûÏ¢ÀàÐÍ¡£

ÒòΪNettyÖ÷ÒªÊÇÒ»ÖÖ·þÎñÆ÷¶ËµÄ¼¼Êõ£¬ËùÒÔÔÚÕâÀïÎÒÃÇÖص㴴½¨WebSocket·þÎñÆ÷¡£´úÂëÈçÏÂËùʾ£¬Õâ¸öÀà´¦ÀíЭÒéÉý¼¶ÎÕÊÖ£¬ÒÔ¼°3ÖÖ¿ØÖÆÖ¡¡ª¡ªClose¡¢PingºÍPong¡£TextºÍBinaryÊý¾ÝÖ¡½«»á±»´«µÝ¸øÏÂÒ»¸öChannelHandler½øÐд¦Àí¡£

±£»¤WenSocket£ºÒªÏëΪWebSocketÌí¼Ó°²È«ÐÔ£¬Ö»ÐèÒª½«SslHandler×÷ΪµÚÒ»¸öChannelHandlerÌí¼Óµ½ChannelPipelineÖС£

7¡¢¿ÕÏеÄÁ¬½ÓºÍ³¬Ê±

Ö»ÒªÄãÓÐЧµØ¹ÜÀíÄãµÄÍøÂç×ÊÔ´£¬ÕâЩ¼¼Êõ¾Í¿ÉÒÔʹµÃÄãµÄÓ¦ÓóÌÐò¸ü¼Ó¸ßЧ¡¢Ò×ÓúͰ²È«¡£

¼ì²â¿ÕÏÐÁ¬½ÓÒÔ¼°³¬Ê±¶ÔÓÚ¼°Ê±ÊÍ·Å×ÊÔ´À´ËµÊÇÖÁ¹ØÖØÒªµÄ¡£

ÈÃÎÒÃÇ×Ðϸ¿´¿´ÔÚʵ¼ùÖÐʹÓõÃ×î¶àµÄIdleStateHandler¡£ÒÔÏ´úÂëչʾÁ˵±Ê¹ÓÃͨ³£µÄ·¢ËÍÐÄÌøÐÅÏ¢µ½Ô¶³Ì½ÚµãµÄ·½·¨Ê±£¬Èç¹ûÔÚ60ÃëÖ®ÄÚûÓнÓÊÕ»ò·¢ËÍÈκεÄÊý¾Ý£¬ÎÒÃǽ«ÈçºÎµÃµ½Í¨Öª£»Èç¹ûûÓÐÏìÓ¦£¬ÔòÁ¬½Ó»á±»¹Ø±Õ¡£

ÒÔÉÏʾÀýÑÝʾÁËÈçºÎʹÓÃIdleStateHandlerÀ´²âÊÔÔ¶³Ì½ÚµãÊÇ·ñÈÔÈ»»¹»î×Å£¬²¢ÇÒÔÚËüʧ»îʱͨ¹ý¹Ø±ÕÁ¬½ÓÀ´ÊÍ·Å×ÊÔ´

Èç¹ûÁ¬½Ó³¬¹ý60ÃëûÓнÓÊÕ»òÕß·¢ËÍÈκεÄÊý¾Ý£¬ÄÇôIdleStateHandler½«»áʹÓÃÒ»¸öIdleStateEventʼþÀ´µ÷ÓÃfireUserEventTriggered£¨£©·½·¨¡£HeartbeatHandlerʵÏÖÁËuserEventTriggered£¨£©·½·¨£¬Èç¹ûÕâ¸ö·½·¨¼ì²âµ½IdleStateEventʼþ£¬Ëü½«»á·¢ËÍÐÄÌøÏûÏ¢£¬²¢ÇÒÌí¼ÓÒ»¸ö½«ÔÚ·¢ËͲÙ×÷ʧ°Üʱ¹Ø±Õ¸ÃÁ¬½ÓµÄChannelFutureListener¡£

8¡¢½âÂë»ùÓÚ·Ö¸ô·ûµÄЭÒéºÍ»ùÓÚ³¤¶ÈµÄЭÒé

»ùÓÚ·Ö¸ô·ûµÄ£¨delimited£©ÏûϢЭÒéʹÓö¨ÒåµÄ×Ö·ûÀ´±ê¼ÇµÄÏûÏ¢»òÏûÏ¢¶Î£¨Í¨³£±»³ÆΪ֡£©µÄ¿ªÍ·»òÕß½áβ¡£ÓÉRFCÎĵµÕýʽ¶¨ÒåµÄÐí¶àЭÒ飨ÈçSMTP¡¢POP3¡¢IMAPÒÔ¼°Telnet£©¶¼ÊÇÕâÑù¡£

ÏÂͼչʾÁ˵±Ö¡ÓÉÐÐβÐòÁÐ\r\n·Ö¸îʱÊÇÈçºÎ±»´¦ÀíµÄ¡£ÒÔÏ´úÂëչʾÁËÈçºÎʹÓÃLineBasedFrameDecoderÀ´´¦ÀíÉÏͼµÄ³¡¾°¡£

Èç¹ûÄãÕýÔÚʹÓóýÁËÐÐβ·ûÖ®ÍâµÄ·Ö¸ô·ûµÄÖ¡£¬ÄÇôÄã¿ÉÒÔÒÔÀàËƵķ½·¨Ê¹ÓÃDelimiterBasedFrameDecoder£¬Ö»ÐèÒª½«Ìض¨µÄ·Ö¸ô·ûÐòÁÐÖ¸¶¨µ½Æä¹¹Ô캯Êý¼´¿É¡£

ÕâЩ½âÂëÆ÷ÊÇʵÏÖÄã×Ô¼ºµÄ»ùÓÚ·Ö¸ô·ûµÄЭÒéµÄ¹¤¾ß¡£×÷ΪʾÀý£¬ÎÒÃǽ«Ê¹ÓÃÏÂÃæµÄЭÒé¹æ·¶£º

¡ª¡ª´«ÈëÊý¾ÝÁ÷ÊÇһϵÁеÄÖ¡£¬Ã¿¸öÖ¡¶¼ÓÉ»»Ðзû£¨\n£©·Ö¸î

¡ª¡ªÃ¿¸öÖ¡¶¼ÓÉһϵÁеÄÔªËØ×é³É£¬Ã¿¸öÔªËض¼Óɵ¥¸ö¿Õ¸ñ×Ö·û·Ö¸î

¡ª¡ªÒ»¸öÖ¡µÄÄÚÈÝ´ú±íÁËÒ»¸öÃüÁî¡¢¶¨ÒåΪһ¸öÃüÁîÃû³Æºó¸ú×ÅÊýÄ¿¿É±äµÄ²ÎÊý

ÎÒÃÇÓÃÓÚÕâ¸öЭÒéµÄ×Ô¶¨Òå½âÂëÆ÷½«¶¨ÒåÒÔÏÂÀࣺ

¡ª¡ªCmd¡ª¡ª½«Ö¡£¨ÃüÁµÄÄÚÈÝ´æ´¢ÔÚByteBufÖУ¬Ò»¸öByteBufÓÃÓÚÃû³Æ£¬ÁíÒ»¸öÓÃÓÚ²ÎÊý

¡ª¡ªCmdDecoder¡ª¡ª´Ó±»ÖØдÁ˵Ädecode£¨£©·½·¨ÖлñÈ¡Ò»ÐÐ×Ö·û´®£¬²¢´ÓËüµÄÄÚÈݹ¹½¨Ò»¸öCmdµÄʵÀý

¡ª¡ªCmdHandler¡ª¡ª´ÓCmdDecoder»ñÈ¡½âÂëµÄCmd¶ÔÏ󣬲¢¶ÔËü½øÐÐһЩ´¦Àí£»

¡ª¡ªCmdHandlerinitializer¡ª¡ªÎªÁ˼ò±ãÆð¼û£¬ÎÒÃǽ«»á°ÑÇ°ÃæµÄÕâЩÀඨÒåΪרÃŵÄChannelInitializerµÄǶÌ×À࣬Æ佫»á°ÑÕâЩChannelInboundHandler°²×°µ½ChannelPipelineÖС£

ÒÔÏ´úÂ룬Õâ¸ö½âÂëÆ÷µÄ¹Ø¼üÊÇÀ©Õ¹LineBasedFrameDecoder¡£

9¡¢»ùÓÚ³¤¶ÈµÄЭÒé

»ùÓÚ³¤¶ÈµÄЭÒéͨ¹ý½«ËüµÄ³¤¶È±àÂëµ½Ö¡µÄÍ·²¿À´¶¨ÒåÖ¡£¬¶ø²»ÊÇʹÓÃÌØÊâµÄ·Ö¸ô·ûÀ´±ê¼ÇËüµÄ½áÊø¡£

ÏÂͼչʾÁËFixedLengthFrameDecoderµÄ¹¦ÄÜ£¬ÆäÔÚ¹¹ÔìʱÒѾ­Ö¸¶¨ÁËÖ¡³¤¶ÈΪ8×Ö½Ú¡£Ä㽫¾­³£»áÓöµ½±»±àÂëµ½ÏûϢͷ²¿µÄÖ¡´óС²»Êǹ̶¨ÖµµÄЭÒ顣ΪÁË´¦ÀíÕâÖֱ䳤֡£¬Äã¿ÉÒÔʹÓÃLengthFieldBasedFrameDecoder£¬Ëü½«´ÓÍ·²¿×Ö¶ÎÈ·¶¨Ö¡³¤£¬È»ºó´ÓÊý¾ÝÁ÷ÖÐÌáÈ¡Ö¸¶¨µÄ×Ö½ÚÊý¡£

ÏÂͼչʾÁËʾÀý£¬ÆäÖ㤶È×Ö¶ÎÔÚÖ¡ÖеÄÆ«ÒÆÁ¿Îª0£¬²¢ÇÒ³¤¶ÈΪ2×Ö½Ú¡£LengthFieldBasedFrameDecoderÌṩÁ˼¸¸ö¹¹Ô캯ÊýÀ´Ö§³Ö¸÷ÖÖ¸÷ÑùµÄÍ·²¿ÅäÖÃÇé¿ö¡£ÒÔÏ´úÂëչʾÁËÈçºÎʹÓÃÆä3¸ö¹¹Ôì²ÎÊý·Ö±ðΪmaxFrameLength¡¢lengthFieldOffsetºÍlengthFieldLengthµÄ¹¹Ô캯Êý¡£ÔÚÕâ¸ö³¡¾°ÖУ¬Ö¡µÄ³¤¶È±»±àÂëµ½ÁËÖ¡ÆðʼµÄÇ°8¸ö×Ö½ÚÖС£

10¡¢Ð´´óÐÍÊý¾Ý

ÒòΪÍøÂç±¥ºÍµÄ¿ÉÄÜÐÔ£¬ÈçºÎÔÚÒì²½¿ò¼ÜÖиßЧµØд´ó¿éµÄÊý¾ÝÊÇÒ»¸öÌØÊâµÄÎÊÌâ¡£ÓÉÓÚд²Ù×÷ÊÇ·Ç×èÈûµÄ£¬ËùÒÔ¼´Ê¹Ã»ÓÐд³öËùÓеÄÊý¾Ý£¬Ð´²Ù×÷Ò²»áÔÚÍê³Éʱ·µ»Ø²¢Í¨ÖªChannelFuture¡£µ±ÕâÖÖÇé¿ö·¢Éúʱ£¬Èç¹ûÈÔÈ»²»Í£µØдÈ룬¾ÍÓÐÄÚ´æºÄ¾¡µÄ·çÏÕ£¬ËùÒÔÔÚд´óÐÍÊý¾Ýʱ£¬ÐèҪ׼±¸ºÃ´¦Àíµ½Ô¶³Ì½ÚµãµÄÁ¬½ÓÊÇÂýËÙÁ¬½ÓµÄÇé¿ö£¬ÕâÖÖÇé¿ö»áµ¼ÖÂÄÚ´æÊͷŵÄÑÓ³Ù¡£

NIOµÄÁ㿽±´ÌØÐÔ£¬ÕâÖÖÌØÐÔÏû³ýÁ˽«ÎļþµÄÄÚÈÝ´ÓÎļþϵͳÒƶ¯µ½ÍøÂçÕ»µÄ¸´Öƹý³Ì¡£ËùÓеÄÒ»Çж¼·¢ÉúÔÚNettyµÄºËÐÄÖУ¬ËùÒÔÓ¦ÓóÌÐòËùÓÐÐèÒª×öµÄ¾ÍÊÇʹÓÃÒ»¸öFileRegion½Ó¿ÚµÄʵÏÖ£¬ÆäÔÚNettyµÄAPIÎĵµÖеĶ¨ÒåÊÇ£º¡°Í¨¹ýÖ§³ÖÁ㿽±´µÄÎļþ´«ÊäµÄChannelÀ´·¢Ë͵ÄÎļþÇøÓò¡£¡±

ÒÔÏ´úÂëչʾÁËÈçºÎͨ¹ý´ÓFileInputStream´´½¨Ò»¸öDefaultFileRegion£¬²¢½«ÆäдÈëChannel£¬´Ó¶øÀûÓÃÁ㿽±´ÌØÐÔÀ´´«ÊäÒ»¸öÎļþµÄÄÚÈÝ¡£

Õâ¸öʾÀýÖ»ÊÊÓÃÓÚÎļþÄÚÈݵÄÖ±½Ó´«Ê䣬²»°üÀ¨Ó¦ÓóÌÐò¶ÔÊý¾ÝµÄÈκδ¦Àí¡£ÔÚÐèÒª½«Êý¾Ý´ÓÎļþϵͳ¸´ÖƵ½Óû§ÄÚ´æÖÐʱ£¬¿ÉÒÔʹÓÃChunkedWriteHandler£¬ËüÖ§³ÖÒ첽д´óÐÍÊý¾ÝÁ÷£¬¶øÓÖ²»»áµ¼Ö´óÁ¿µÄÄÚ´æÏûºÄ¡£

¹Ø¼üÊÇinterface ChunkedInput£¬ÆäÖÐÀàÐͲÎÊýBÊÇreadChunk()·½·¨·µ»ØµÄÀàÐÍ¡£NettyÔ¤ÖÃÁ˸ýӿڵÄ4¸öʵÏÖ¡£

ÒÔÏ´úÂë˵Ã÷ÁËChunkedStreamµÄÓ÷¨£¬ËüÊÇʵ¼ùÖÐ×î³£ÓõÄʵÏÖ¡£ËùʾµÄÀàʹÓÃÁËÒ»¸öFileÒÔ¼°Ò»¸öSslContext½øÐÐʵÀý»¯¡£µ±initChannel()·½·¨±»µ÷ÓÃʱ£¬Ëü½«Ê¹ÓÃËùʾµÄChannelHandlerÁ´³õʼ»¯¸ÃChannel¡£µ±ChannelµÄ״̬±äΪ»î¶¯Ê±£¬WriteStreamHandler½«»áÖð¿éµØ°ÑÀ´×ÔÎļþÖеÄÊý¾Ý×÷ΪChunkedStreamдÈë¡£Êý¾ÝÔÚ´«Êä֮ǰ½«»áÓÉSslHandler¼ÓÃÜ¡£

Öð¿éÊäÈ룺ҪʹÓÃÄã×Ô¼ºµÄChunkedInputʵÏÖ£¬ÇëÔÚChannelPipelineÖа²×°Ò»¸öChunkedWriteHandler

11¡¢JDKÐòÁл¯Êý¾Ý

JDKÌṩÁËObjectOutputStreamºÍObjectInputStream£¬ÓÃÓÚͨ¹ýÍøÂç¶ÔPOJOµÄ»ù±¾Êý¾ÝÀàÐͺÍͼ½øÐÐÐòÁл¯ºÍ·´ÐòÁл¯¡£¸ÃAPI²¢²»¸´ÔÓ£¬¶øÇÒ¿ÉÒÔ±»Ó¦ÓÃÓÚÈκÎʵÏÖÁËjava.io.Serializable½Ó¿ÚµÄ¶ÔÏó¡£µ«ÊÇËüµÄÐÔÄÜÒ²²»ÊǷdz£¸ßЧ¡£

Èç¹ûÄãµÄÓ¦ÓóÌÐò±ØÐëÒªºÍʹÓÃÁËObjectOutputStreamºÍObjectInputStreamµÄÔ¶³Ì½Úµã½»»¥£¬²¢ÇÒ¼æÈÝÐÔÒ²ÊÇÄã×î¹ØÐĵģ¬ÄÇôJDKÐòÁл¯½«ÊÇÕýÈ·µÄÑ¡Ôñ¡£

12¡¢Ê¹ÓÃÁËJBoss Marshalling½øÐÐÐòÁл¯

Èç¹ûÄã¿ÉÒÔ×ÔÓɵØʹÓÃÍⲿÒÀÀµ£¬ÄÇôJBoss Marshalling½«ÊÇÒ»¸öÀíÏëµÄÑ¡Ôñ£ºËû±ÈJDKÐòÁл¯×î¶à¿ì3±¶£¬¶øÇÒÒ²¸ü¼Ó½ô´Õ¡£

ÒÔÏ´úÂëչʾÁËÈçºÎʹÓÃMarshallingDecoderºÍMarshallingEncoder¡£Í¬Ñù£¬¼¸ºõÖ»ÊÇÊʵ±µØÅäÖÃChannelPipeline°ÕÁË¡£

13¡¢Í¨¹ýProtocol BuffersÐòÁл¯

NettyÐòÁл¯µÄ×îºóÒ»¸ö½â¾ö·½°¸ÊÇÀûÓÃProtocol BuffersµÄ±à½âÂëÆ÷£¬ËüÊÇÒ»¸öÓÉGoogle¹«Ë¾¿ª·¢µÄ¡¢ÏÖÔÚÒѾ­¿ªÔ´µÄÊý¾Ý½»»»¸ñʽ¡£

Protocol BuffersÒÔÒ»ÖÖ½ô´Õ¶ø¸ßЧµÄ·½Ê½¶Ô½á¹¹»¯µÄÊý¾Ý½øÐбàÂëÒÔ¼°½âÂë¡£Ëü¾ßÓÐÐí¶à±à³ÌÓïÑ԰󶨣¬Ê¹µÃËüºÜÊʺϿçÓïÑÔµÄÏîÄ¿¡£

ÔÚÕâÀïÎÒÃÇÓÖ¿´µ½ÁË£¬Ê¹ÓÃprotobufÖ»²»¹ýÊǽ«ÕýÈ·µÄChannelHandlerÌí¼Óµ½ChannelPipelineÖУ¬ÈçÏ´úÂë¡£

  • ·¢±íÓÚ:
  • Ô­ÎÄÁ´½Ó£ºhttp://kuaibao.qq.com/s/20180315G0AWTV00?refer=cp_1026
  • ÌÚѶ¡¸ÌÚѶÔÆ¿ª·¢ÕßÉçÇø¡¹ÊÇÌÚѶÄÚÈÝ¿ª·Åƽ̨Õʺţ¨Æó¶ìºÅ£©´«²¥ÇþµÀÖ®Ò»£¬¸ù¾Ý¡¶ÌÚѶÄÚÈÝ¿ª·Åƽ̨·þÎñЭÒ顷תÔØ·¢²¼ÄÚÈÝ¡£
  • ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

ɨÂë

Ìí¼ÓÕ¾³¤ ½ø½»Á÷Ⱥ

ÁìȡרÊô 10ÔªÎÞÃż÷ȯ

˽Ïí×îР¼¼Êõ¸É»õ

ɨÂë¼ÓÈ뿪·¢ÕßÉçȺ
Áìȯ
http://www.vxiaotou.com