猿问

请大神解答一下关于netty客户端定时发送消息给服务端

1 . 只有一个客户端和服务端 连着 , 发送消息的时候用channel 的 writeAndFlush , 用线程结果Channel 一直被线程占用 , 只能发消息 , 其他的事情做不了

  1. 请问有什么解决的办法吗 , 或者netty 是有那个类可以专门处理客户端给服务端发送数据的呢

  2. 还有就是有没有关于客户端给服务端发送数据执行流程的博文呢 4 . 谢谢帮助我的大神

// workerGroup处理已经被接收的连接
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        AtsClient client = this;
        //workerGroup.scheduleAtFixedRate(command, initialDelay, period, unit);

        try {
            // Bootstrap是一个启动 NIO 服务的辅助启动类
            Bootstrap b = new Bootstrap();
            b.group(workerGroup);
            // 使用NioSocketChannel类的新的channel接收进来的连接
            b.channel(NioSocketChannel.class);
            // option() 是提供给NioSocketChannel用来接收进来的连接
            b.option(ChannelOption.SO_KEEPALIVE, true);

            // 处理最近接收的channel
            b.handler(new ChannelInitializer<SocketChannel>() {
                @Override
                public void initChannel(SocketChannel ch) throws Exception {
                    // 设定IdleStateHandler心跳检测每五秒进行一次写检测,如果五秒内write()
                    方法未被调用则触发一次userEventTrigger()方法,实现客户端每五秒秒向服务端发送一次消息
                    ch.pipeline().addLast(
                            new IdleStateHandler(0, 5, 0, TimeUnit.SECONDS));
                    // 解码器
                    ch.pipeline().addLast("AtsDecoder", new AtsDecoder());
                    // 处理器
                    ch.pipeline().addLast("AtsHanler", new AtsHandler(client));
                    // 编码器
                    ch.pipeline().addLast("AtsEncoder", new AtsEncoder());


                }
            });
            // Start the client. 绑定端口然后启动服务
             ChannelFuture f = b.connect(host, port).sync();

            channel = f.channel();
            System.out.println(channel);

            channel.eventLoop().scheduleAtFixedRate(new Runnable() {

                @Override
                public void run() {

                    sendPlanTrain();


                }
            }, 5, 3, TimeUnit.SECONDS);




智慧大石
浏览 2005回答 2
2回答
随时随地看视频慕课网APP

相关分类

Java
我要回答