2014-01-28 26 views
0

我已經開始使用Netty並且有一個問題。如示例中所示,我引導Netty。Netty channelRead

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連接後呼叫。這是預期還是我做錯了什麼?如果我在收到某些東西后沒有關閉套接字,它是否僅僅等待接收到的消息進入?

回答

3

這是因爲closeFuture()。sync()會阻塞,直到通道關閉。所以我不認爲這是你想要的...

+0

謝謝。現在你明確指出了這一點。我剛剛在Netty網站上看到了這個例子,並沒有想到在渠道關閉之前我阻止了這個事實。 – ryknow

0

看起來像你使用netty python。但似乎有些奇怪,我認爲你的bootstrap.connect沒有指定主機&端口...(這可能是由於僞代碼在線搶下)

當然它需要連接,否則你的程序後,會阻止將退出連接被迫關閉。

您的channelRead將不會被調用,直到從網絡的另一端發送消息。