編寫丟棄服務(wù)器的方法
1、DiscardServerHandler擴展ChannelInboundHandlerAdapter,這是的實現(xiàn)ChannelInboundHandler。ChannelInboundHandler提供了可以覆蓋的各種事件處理程序方法?,F(xiàn)在,僅擴展ChannelInboundHandlerAdapter而不是自己實現(xiàn)處理程序接口就足夠了。
2、我們在channelRead
這里重寫事件處理程序方法。每當從客戶端接收到新數(shù)據(jù)時,就使用接收到的消息來調(diào)用此方法。在此示例中,接收到的消息的類型為ByteBuf。
3、為了實現(xiàn)DISCARD協(xié)議,處理程序必須忽略收到的消息。ByteBuf是一個引用計數(shù)對象,必須通過該release
方法顯式釋放。請記住,釋放任何傳遞給處理程序的引用計數(shù)對象是處理程序的責任。通常,channelRead
處理程序方法的實現(xiàn)如下:
4、該exceptionCaught
事件處理方法被調(diào)用,可拋出異常時被提出的Netty由于I/O錯誤或由處理器實現(xiàn),由于在處理事件引發(fā)的異常。在大多數(shù)情況下,應(yīng)該記錄捕獲的異常,并在此處關(guān)閉其關(guān)聯(lián)的通道,盡管此方法的實現(xiàn)可能會有所不同,具體取決于您要處理特殊情況時要采取的措施。例如,您可能想在關(guān)閉連接之前發(fā)送帶有錯誤代碼的響應(yīng)消息。
到現(xiàn)在為止還挺好。我們已經(jīng)實現(xiàn)了DISCARD服務(wù)器的前半部分?,F(xiàn)在剩下的就是編寫使用main
來啟動服務(wù)器的方法DiscardServerHandler。
5、查看接收到的數(shù)據(jù)
現(xiàn)在,我們已經(jīng)編寫了第一臺服務(wù)器,我們需要測試它是否確實有效。測試它的最簡單方法是使用telnet命令。例如,您可以telnet localhost 8080在命令行中輸入并輸入一些內(nèi)容。
但是,我們可以說服務(wù)器工作正常嗎?我們真的不知道這是因為它是一個廢棄服務(wù)器。您根本不會得到任何回應(yīng)。為了證明它確實有效,讓我們修改服務(wù)器以打印收到的內(nèi)容。
我們已經(jīng)知道,channelRead
每當收到數(shù)據(jù)時都會調(diào)用該方法。讓我們將一些代碼放入channelRead
方法中DiscardServerHandler:
這個低效的循環(huán)實際上可以簡化為:System.out.println
in.toString
io.netty.util.CharsetUtil.US_ASCII
或者,您可以在in.release
這里進行。
如果再次運行telnet命令,您將看到服務(wù)器打印收到的內(nèi)容。
丟棄服務(wù)器的完整源代碼位于io.netty.example.discard分發(fā)包中。