【Chapter 1 Netty and Java NIO APIs】
The entire Netty API is asynchronous.安全
Asynchronous processing encourages you to use your resources more efficiently by allowing you to start a task and get notified when it's done rather than waiting for it to complete. You're free to do something else while the task is running.app
實現異步的兩種方法:異步
On Linux-like OSs the selector makes use of the epoll- IO event notification facility. This is a high-performance technique in which the OS works asynchronously with the networking stack.Unfortunately, even today the famous epoll- bug can lead to an invalid state in the
selector, resulting in 100% CPU-usage and spinning.async
【Chapter 2 Your first Netty application】ide
Handler能夠被多個Channel共享,這時Handler必須被@Sharable註解且必須是線程安全的this
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER) //writeAndFlush是異步操做,返回ChannelFuture .addListener(ChannelFutureListener.CLOSE); //經過ChannelFuture.addListener()註冊監聽器,當Future.isDone()等於true時會執行監聽器
對於一個Channel,其pipeline中至少要有一個Handler可以處理異常線程
Next, override the channelRead0() method. The method is called once data is received.Note that the bytes may be fragmented, which means that if the server writes 5 bytes it s not guaranteed that all 5 bytes will be received at once. For 5 bytes, the channelRead0() method could be called twice, for example. The first time it may be called with a ByteBuf that holds 3 bytes and the second time with a ByteBuf that holds 2 bytes. The only guarantee is that the bytes will be received in the same order as they re sent. But this is only true for TCP or other stream-orientated protocols.code
SimpleChannelInboundHandler與ChannelInboundHandlerAdapter的區別:orm