netty5 长联接问题

毛毛侯 发布于 2015/04/28 09:59
阅读 929
收藏 2

收藏!数据建模最全知识体系解读!>>>

我在使用netty5做通讯框架,长联接。连续发送多个请求,服务端每个请求后也执行 ctx.writeAndFlush(buildResponse(message, body));服务端居然将几个请求处理完了后。端户端才会有反应。哪位能帮解决一下,实现writeAndFlush后客户端能立即收到响应。

Server

ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024).handler(new LoggingHandler(LogLevel.INFO)).childHandler(new ChildChannelHandler());
            f = b.bind(port).sync();
            System.out.println("Netty Server start ok:" + (NettyConstant.REMOTEIP + ":" + port));
            f.channel().closeFuture().sync();


client

  Bootstrap b = new Bootstrap();
            //            b.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true).handler(new ChannelInitializer<SocketChannel>() {
            b.group(group).channel(NioSocketChannel.class).option(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT)
                    .handler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel c) throws Exception {
                            // -8表示lengthAdjustment,让解码器从0开始截取字节,并且包含消息头  
                            c.pipeline().addLast(new NettyMessageDecoder(Integer.MAX_VALUE, 4, 4, -8, 0));
                            c.pipeline().addLast(new NettyMessageEncoder());
                            c.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
                            //                    c.pipeline().addLast("readTimeoutHandler", new ReadTimeoutHandler(50));
                            c.pipeline().addLast("LoginAuthHandler", new LoginAuthReqHandler());
                            c.pipeline().addLast(new InitHandler());
                            c.pipeline().addLast(new ClientHandler());
                        }
                    });
            //此外可以发送多个目标地址
            ChannelFuture f = b.connect(host, port).sync();
            System.out.println("Netty time Client connected at port " + port);
            f.channel().closeFuture().sync();


加载中
0
loyal
loyal
好先进啊,我们都4
0
cyb_beta
cyb_beta
应该是发生粘包了吧
0
毛毛侯
参考netty权威指南上写的。非常感谢两位.不过已经解决了。在后台加了一个newSingleThreadExecutor就可以立刻返回数据。而不会拼在一块了。
0
l
lookstorm

引用来自“毛毛侯”的评论

参考netty权威指南上写的。非常感谢两位.不过已经解决了。在后台加了一个newSingleThreadExecutor就可以立刻返回数据。而不会拼在一块了。
你是说server端的childHandler吧?使用线程池去执行业务hander?
返回顶部
顶部