現(xiàn)在我們已經(jīng)編寫出我們第一個(gè)服務(wù)端,我們需要測(cè)試一下他是否真的可以運(yùn)行。最簡(jiǎn)單的測(cè)試方法是用 telnet 命令。例如,你可以在命令行上輸入telnet localhost 8080
或者其他類型參數(shù)。
http://wiki.jikexueyuan.com/project/netty-4-user-guide/images/1.1.jpg" alt="" />
http://wiki.jikexueyuan.com/project/netty-4-user-guide/images/1.2.jpg" alt="" />
然而我們能說這個(gè)服務(wù)端是正常運(yùn)行了嗎?事實(shí)上我們也不知道,因?yàn)樗且粋€(gè) discard 服務(wù),你根本不可能得到任何的響應(yīng)。為了證明他仍然是在正常工作的,讓我們修改服務(wù)端的程序來打印出他到底接收到了什么。
我們已經(jīng)知道 channelRead() 方法是在數(shù)據(jù)被接收的時(shí)候調(diào)用。讓我們放一些代碼到 DiscardServerHandler 類的 channelRead() 方法。
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf in = (ByteBuf) msg;
try {
while (in.isReadable()) { // (1)
System.out.print((char) in.readByte());
System.out.flush();
}
} finally {
ReferenceCountUtil.release(msg); // (2)
}
}
1.這個(gè)低效的循環(huán)事實(shí)上可以簡(jiǎn)化為:System.out.println(in.toString(io.netty.util.CharsetUtil.US_ASCII))
2.或者,你可以在這里調(diào)用 in.release()。
如果你再次運(yùn)行 telnet 命令,你將會(huì)看到服務(wù)端打印出了他所接收到的消息。
http://wiki.jikexueyuan.com/project/netty-4-user-guide/images/1.3.jpg" alt="" />
完整的discard server代碼放在了io.netty.example.discard包下面。
譯者注:翻譯版本的項(xiàng)目源碼見 https://github.com/waylau/netty-4-user-guide-demos 中的com.waylau.netty.demo.discard
包下