我已经开始与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。这是预期还是我做错了什么?如果我收到东西后没有关闭套接字,它是否只是坐着等待收到的消息进来?
答案 0 :(得分:3)
这是因为closeFuture()。sync()将阻塞直到通道关闭。所以我认为这不是你想要的......
答案 1 :(得分:0)
看起来你正在使用netty python。但是我觉得你的bootstrap.connect没有指定host&端口......(可能是因为从网上抓取了伪代码)
当然它需要在连接后阻塞,否则你的程序会在连接被强制关闭的情况下退出。
在从网络的另一端发送消息之前,不会调用您的channelRead。