此我们运行设定一些 socket 选项,例如 tcpNoDelay 和 keepAlive。请注意我们在配置选项里添加
的"child."前缀。这意味着这个配置项仅适用于我们接收到的通道实例,而不是 ServerSocketChannel
实例。因此,你可以这样给一个 ServerSocketChannel 设定参数:
bootstrap.setOption("reuseAddress", true);
5)我们继续。剩下要做的是绑定这个服务使用的端口并且启动这个服务。这里,我们绑定本机所有网
卡(NICs,network interface cards)上的 8080 端口。当然,你现在也可以对应不同的绑定地址多次调
用绑定操作。
大功告成!现在你已经完成你的第一个基于 Netty 的服务端程序。
1.3. 查看接收到的数据
现在你已经完成了你的第一个服务端程序,我们需要测试它是否可以真正的工作。最简单的方法是使用
telnet 命令。例如,你可以在命令行中输入“telnet localhost 8080 ”或其他类型参数。
然而,我们可以认为服务器在正常工作吗?由于这是一个丢球协议服务,所以实际上我们无法真正的知道。
你最终将收不到任何回应。为了证明它在真正的工作,让我们修改代码打印其接收到的数据。
我们已经知道当完成数据的接收后将产生 MessageEvent 消息事件,并且也会触发 messageReceived 处
理方法。所以让我在 DiscardServerHandler 处理器的 messageReceived 方法内增加一些代码。
Java 代码
43 @Override
44 public void messageReceived(ChannelHandlerContext ctx,
MessageEvent e) {
45 ChannelBu<er buf = (ChannelBu<er) e.getMessage();
46 while(buf.readable()) {
47 System.out.println((char) buf.readByte());
48 }
49 }
代码说明
1) 基本上我们可以假定在 socket 的传输中消息类型总是 ChannelBuffer。ChannelBuffer 是 Netty 的一
个基本数据结构,这个数据结构存储了一个字节序列。ChannelBuffer 类似于 NIO 的 ByteBuffer,但
是前者却更加的灵活和易于使用。例如,Netty 允许你创建一个由多个 ChannelBuffer 构建的复合
ChannelBuffer 类型,这样就可以减少不必要的内存拷贝次数。
2) 虽然 ChannelBuffer 有些类似于 NIO 的 ByteBuffer,但强烈建议你参考 Netty 的 API 手册。学会如
何正确的使用 ChannelBuffer 是无障碍使用 Netty 的关键一步。