码迷,mamicode.com
首页 > 其他好文 > 详细

超时问题

时间:2016-12-27 09:30:10      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:检测   final   rri   客户端   add   exce   ide   state   protect   

package org.zln.netty.tout.server;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.Delimiters;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import io.netty.handler.timeout.IdleStateHandler;
import io.netty.handler.timeout.WriteTimeoutHandler;
import io.netty.util.CharsetUtil;

import java.util.concurrent.TimeUnit;


/**
 * Created by sherry on 16/12/15.
 */
public class TimeoutServerInit extends ChannelInitializer<SocketChannel> {

    private static final int READ_IDEL_TIME_OUT = 4; // 读超时 - 客户端连接后不写数据
    private static final int WRITE_IDEL_TIME_OUT = 1;// 写超时
    private static final int ALL_IDEL_TIME_OUT = 2; // 所有超时



    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        pipeline.addLast("timeoutHandler",new IdleStateHandler(READ_IDEL_TIME_OUT,WRITE_IDEL_TIME_OUT, ALL_IDEL_TIME_OUT, TimeUnit.SECONDS));
//        pipeline.addLast("readtimeout",new ReadTimeoutHandler(4));
//        pipeline.addLast("writetimeout",new WriteTimeoutHandler(2));
        pipeline.addLast("framer", new DelimiterBasedFrameDecoder(1024, Delimiters.lineDelimiter() ));
        pipeline.addLast("decoder",new StringDecoder(CharsetUtil.UTF_8));
        pipeline.addLast("encoder",new StringEncoder(CharsetUtil.UTF_8));
        pipeline.addLast("handler",new TimeoutServerHandler());
    }
}

package org.zln.netty.tout.client;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.Delimiters;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import io.netty.handler.timeout.IdleStateHandler;
import io.netty.util.CharsetUtil;

import java.util.concurrent.TimeUnit;

/**
 * Created by sherry on 16/12/15.
 */
public class TimeoutClientInit extends ChannelInitializer<SocketChannel> {

    private static final int READ_IDEL_TIME_OUT = 10; // 读超时 - 多久没从服务器获取到返回数据
    private static final int WRITE_IDEL_TIME_OUT = 50;// 写超时 - 连接到服务器后,多久没有写数据
    private static final int ALL_IDEL_TIME_OUT = 70; // 所有超时


    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        pipeline.addLast("timeoutHandler",new IdleStateHandler(READ_IDEL_TIME_OUT,WRITE_IDEL_TIME_OUT, ALL_IDEL_TIME_OUT, TimeUnit.SECONDS));
        pipeline.addLast("framer", new DelimiterBasedFrameDecoder(1024, Delimiters.lineDelimiter() ));
        pipeline.addLast("decoder",new StringDecoder(CharsetUtil.UTF_8));
        pipeline.addLast("encoder",new StringEncoder(CharsetUtil.UTF_8));
        pipeline.addLast("handler",new TimeoutClientHandler());
    }
}

上面两段代码,分别在服务端与客户端做了超时设置。

目前没找到有什么方案能够直接使用Netty进行请求处理的超时设置
甚至没有检测客户端/服务端是否在线的好的方法。一旦进行channelRead0,其他方法只有在运行完read后才能被调用,所以检测是否在线等方法无效。只能间接通过心跳检测判断服务器/客户端是否在线。

 

超时问题

标签:检测   final   rri   客户端   add   exce   ide   state   protect   

原文地址:http://www.cnblogs.com/sherrykid/p/6224583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!