2010-09-16 37 views
12

Tôi có một kênh netty và tôi muốn đặt thời gian chờ trên ổ cắm bên dưới (nó được đặt theo mặc định là 0).Đặt thời gian chờ của ổ cắm trên kênh netty

Mục đích của thời gian chờ là kênh không được sử dụng sẽ bị đóng nếu không có gì xảy ra trong 15 phút chẳng hạn.

Mặc dù tôi không thấy bất kỳ cấu hình nào để thực hiện điều này và bản thân ổ cắm cũng bị ẩn khỏi tôi.

Cảm ơn

Trả lời

13

Nếu lớp ReadTimeoutHandler được sử dụng, thời gian chờ có thể được kiểm soát.

Sau đây là báo giá từ Javadoc.

public class MyPipelineFactory implements ChannelPipelineFactory { 
    private final Timer timer; 
    public MyPipelineFactory(Timer timer) { 
     this.timer = timer; 
    } 

    public ChannelPipeline getPipeline() { 
     // An example configuration that implements 30-second read timeout: 
     return Channels.pipeline(
      new ReadTimeoutHandler(timer, 30), // timer must be shared. 
      new MyHandler()); 
    } 
} 


ServerBootstrap bootstrap = ...; 
Timer timer = new HashedWheelTimer(); 
... 
bootstrap.setPipelineFactory(new MyPipelineFactory(timer)); 
... 

Khi nó sẽ gây ra một time-out, MyHandler.exceptionCaught (ChannelHandlerContext ctx, ExceptionEvent e) được gọi với ReadTimeoutException.

@Override 
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { 
    if (e.getCause() instanceof ReadTimeoutException) { 
     // NOP 
    } 
    ctx.getChannel().close(); 
} 
Các vấn đề liên quan