2012-06-23 27 views
5

Thứ nhất, đây là một tham chiếu đến nơi tôi đọc tất cả những gì bây giờ tôi biết về câu hỏi này: http://docs.jboss.org/netty/3.2/api/org/jboss/netty/bootstrap/ServerBootstrap.html#bind%28%29Netty ServerBootstrap - liên kết không đồng bộ?

Mặc dù không được xác định một cách rõ ràng bởi các tài liệu, nó sẽ có vẻ rằng ServerBootstrap.bind là đồng bộ - bởi vì nó không trả về một ChannelFuture, mà đúng hơn là một kênh. Nếu đúng như vậy, thì tôi không thấy bất kỳ cách nào để tạo một liên kết không đồng bộ bằng cách sử dụng lớp ServerBootstrap. Tôi có thiếu một cái gì đó hoặc tôi sẽ phải cuộn giải pháp của riêng tôi?

Trân trọng

Trả lời

4

tôi đã kết thúc cán triển khai bootstrap của riêng tôi với việc bổ sung sau đây:

public ChannelFuture bindAsync(final SocketAddress localAddress) 
{ 
    if (localAddress == null) { 
     throw new NullPointerException("localAddress"); 
    } 
    final BlockingQueue<ChannelFuture> futureQueue = 
     new LinkedBlockingQueue<ChannelFuture>(); 
    ChannelHandler binder = new Binder(localAddress, futureQueue); 
    ChannelHandler parentHandler = getParentHandler(); 
    ChannelPipeline bossPipeline = pipeline(); 
    bossPipeline.addLast("binder", binder); 
    if (parentHandler != null) { 
     bossPipeline.addLast("userHandler", parentHandler); 
    } 
    getFactory().newChannel(bossPipeline); 
    ChannelFuture future = null; 
    boolean interrupted = false; 
    do { 
     try { 
      future = futureQueue.poll(Integer.MAX_VALUE, TimeUnit.SECONDS); 
     } catch (InterruptedException e) { 
      interrupted = true; 
     } 
    } while (future == null); 
    if (interrupted) { 
     Thread.currentThread().interrupt(); 
    } 
    return future; 
} 
Các vấn đề liên quan