2012-06-23 5 views
5

pierwsze, tu jest odniesienie do miejsca, gdzie czytam wszystko, co wiem teraz, dotyczące tej kwestii: http://docs.jboss.org/netty/3.2/api/org/jboss/netty/bootstrap/ServerBootstrap.html#bind%28%29Netty ServerBootstrap - asynchroniczne powiązanie?

Chociaż nie zostało to wyraźnie określone w dokumentacji, wydaje się, że ServerBootstrap.bind jest synchroniczna - ponieważ nie zwracają ChannelFuture, ale raczej kanał. W takim przypadku nie widzę żadnego sposobu utworzenia asynchronicznego powiązania za pomocą klasy ServerBootstrap. Czy brakuje mi czegoś lub czy będę musiał przetasować własne rozwiązanie?

poważaniem

Odpowiedz

4

skończyło się toczenia własną implementację bootstrap z następującym uzupełnieniem:

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