Netty频道阅读

时间:2014-01-28 12:59:50

标签: scala netty

我已经开始与Netty合作并有一个问题。我正在引导Netty,如示例所示。

def connect {
  try {
    bootstrap.group(group)
             .channel(classOf[NioSocketChannel])
             .remoteAddress(new InetSocketAddress(host, port))
             .handler(new ChannelInitializer[SocketChannel] {
               override def initChannel(ch: SocketChannel) {
                 ch.pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8))
                            .addLast(new NettyConnectionChannelInbound)
               }
             })

    val future: ChannelFuture = bootstrap.connect.sync

    future.channel.closeFuture.sync
  } finally {
    group.shutdownGracefully
  }
}

我有另一个带有channelRead方法的类

class NettyConnectionChannelInbound extends ChannelInboundHandlerAdapter {
  override def channelRead(ctx: ChannelHandlerContext, msg: Any) {
    println(msg)
  }
}

当我运行我的应用程序时

val nc = new NettyConnection
nc.connect
println("After connection")

连接通话后似乎无法访问println。这是预期还是我做错了什么?如果我收到东西后没有关闭套接字,它是否只是坐着等待收到的消息进来?

2 个答案:

答案 0 :(得分:3)

这是因为closeFuture()。sync()将阻塞直到通道关闭。所以我认为这不是你想要的......

答案 1 :(得分:0)

看起来你正在使用netty python。但是我觉得你的bootstrap.connect没有指定host&端口......(可能是因为从网上抓取了伪代码)

当然它需要在连接后阻塞,否则你的程序会在连接被强制关闭的情况下退出。

在从网络的另一端发送消息之前,不会调用您的channelRead。