Notes on Netty baics
-
Upload
rick-hightower -
Category
Technology
-
view
1.538 -
download
1
Transcript of Notes on Netty baics
![Page 1: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/1.jpg)
NOTES ON NETTY (BASICS)
RICK HIGHTOWER’S
![Page 2: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/2.jpg)
ABOUT RICK HIGHTOWERABOUT RICK
• Implemented Microservices, Vert.x/Netty at massive scale
• Author of QBit, microservices lib and Boon, Json parser and utility lib
• Founder of Mammatus Technology
• Rick’s Twitter, Rick’s LinkedIn, Rick’s Blog, Rick’s Slideshare
![Page 3: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/3.jpg)
Great book on Netty
![Page 4: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/4.jpg)
http://www.infoq.com/presentations/apple-netty
Great talk about Netty
![Page 5: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/5.jpg)
BASIC CONCEPTS
![Page 6: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/6.jpg)
NETTY BASIC IO CHANNEL, EVENTLOOP, CHANNELFUTURE
• Channel - Sockets
• EventLoop - Control Flow
• ChannelFuture - async notification
![Page 7: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/7.jpg)
BASIC I/O OPERATIONSINTERFACE CHANNEL
• bind(), connect(), read(), write()
• Channel reduces complexity
• EmbeddedChannel
• LocalServerChannel
• NioDatagramChannel
• NioSctpChannel
• NioSocketChannel
![Page 8: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/8.jpg)
EVENTLOOPINTERFACE EVENTLOOP
• Core abstraction for handling connection events
• EventLoopGroup contains one or more EventLoops
• EventLoop is bound to a single thread
• IO Events handles by single thread
• Channel is registered to a single EventLoop
• eliminates most needs for synchronization
• EventLoop can handle many channels
![Page 9: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/9.jpg)
CHANNELFUTURECHANNEL FUTURE
• ChannelFuture to handle async operations
• Determine results at a later time
• addListener() to register callback for completion
• When it gets executed depends but they are executed in order of receipt
![Page 10: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/10.jpg)
CHANNEL HANDLERCHANNEL HANDLER
• ChannelHandler used to implement application logic
• Handles inbound and outbound data
• methods are triggered by network events
• ChannelInboundHandler sub-interface handles incoming events
• gets implemented often for application logic
• allows you to flush data going to client
• your business logic will often rely here
![Page 11: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/11.jpg)
CHANNELPIPELINECHANNEL PIPELINE
• ChannelPipeline
• forms chain of ChannelHandlers
• Channel is assigned a ChannelPipeline
• ChannelHandlers are registered with a ChannelIntializer
• ChannelHandlers operate on events by processing them and then passing the event to the next handler in the chain
![Page 12: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/12.jpg)
INBOUND MESSAGES GET DECODEDOUTBOUND MESSAGES GET ENCODED
ENCODERS AND DECODERS
• Inbound messages get DECODED
• Outbound messages get ENCODED
• Converting from bytes to Java objects or serializing Java objects to bytes
• Examples: ByteToMessageDecoder, MessageToByteEncoder, ProtobufEncoder, ProtobufDecoder
• encode(), decode()
• Encoded messages get passed to next ChannelInboundHandler
• Decode messages get passed to next ChannelOutboundHandler
![Page 13: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/13.jpg)
STARTING UP A CLIENT OR A SERVERBOOTSTRAPPING
• Bootstrap - client bootstrap
• uses one thread
• ServerBootstrap - server bootstrap
• binds to a port
• uses two threads
• needs two channels one for listening and a second channel for handling clients connections
• first channel creates Channels for incoming connections which get assigned to an EventLoop
![Page 14: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/14.jpg)
ECHO EXAMPLE
![Page 15: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/15.jpg)
ECHO BACK MESSAGES ECHO SERVER CHANNEL HANDLER
![Page 16: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/16.jpg)
BINDS TO PORT REGISTERS CHANNEL HANDLERSERVER BOOTSTRAP
![Page 17: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/17.jpg)
SEND MESSAGES ON STARTUP AND THEN RECEIVEECHO CLIENT CHANNEL HANDLER
![Page 18: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/18.jpg)
CONNECT TO SERVER GIVEN HOST AND PORT, REGISTER HANDLER
ECHO CLIENT BOOTSTRAP
![Page 19: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/19.jpg)
Great book on Netty
![Page 20: Notes on Netty baics](https://reader031.fdocuments.net/reader031/viewer/2022012914/58887b481a28ab34788b6443/html5/thumbnails/20.jpg)
ABOUT RICK HIGHTOWERABOUT RICK
• Implemented Microservices, Vert.x/Netty at massive scale
• Author of QBit, microservices lib and Boon, Json parser and utility lib
• Founder of Mammatus Technology
• Rick’s Twitter, Rick’s LinkedIn, Rick’s Blog, Rick’s Slideshare