2012-06-23 20 views
5

Birincisi, burada okuma nerede bir referans var ben şimdi bu soruyu ilişkin Bildiğimiz şey: açıkça belgelerinin belirlediği olmasa da http://docs.jboss.org/netty/3.2/api/org/jboss/netty/bootstrap/ServerBootstrap.html#bind%28%29Netty ServerBootstrap - eşzamansız bağlanma?

, ServerBootstrap.bind senkron olduğu gibi görünüyor - bir ChannelFuture dönmez çünkü ama bir Kanal. Bu durumda, o zaman ServerBootstrap sınıfını kullanarak eşzamansız bir bağlama yapmak için herhangi bir yol görmüyorum. Bir şeyi özlüyorum mu yoksa kendi çözümümümü mi kullanmalıyım?

Saygılarımızla

cevap

4

aşağıdaki ek ile kendi önyükleme uygulaması yuvarlanarak kavga: Netty 3.6 olarak

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; 
}