2015-09-20 2 views
0

В приведенном ниже коде я представил DefaultEventExecutor, где выполняется фактическая вставка базы данных. Я сомневаюсь, что это действительно правильный путь, потому что в качестве Каналов будет столько DefaultEventExecutors. Может ли кто-нибудь помочь мне в этом?По умолчаниюEventExecutor поделился между каналами

public class SocketChannelInitializer extends ChannelInitializer<SocketChannel> { 
final static Logger logger = Logger.getLogger("com.my.snapshot"); 
public ComboPooledDataSource cpds; 

public SocketChannelInitializer(ComboPooledDataSource cpds) { 
    this.cpds = cpds; 

} 


@Override 
public void initChannel(SocketChannel ch) throws Exception { 
    if (logger.isDebugEnabled()) { 
     logger.debug("New SocketChannel connection from " + ch.remoteAddress()); 

    } 

    ChannelPipeline pipeline = ch.pipeline(); 
    EventExecutor e1 = new DefaultEventExecutor(); 
    // and then business logic. 

    pipeline.addLast("readTimeoutHandler", new ReadTimeoutHandler(200)); 
    pipeline.addLast("decoder", new MyPacketHeaderDecoder()); 

    /** 
    * Inserting in DB happens in single Thread (e1) 
    * 
    */ 
    pipeline.addLast(e1, "logic", new PacketDatabaseHandler(cpds)); 

} 
} 

ответ

0

Вы должны создать один экземпляр DefaultEventExecutorGroup и использовать тот же экземпляр в методе initChannel (....). В противном случае это не имеет никакого смысла, поскольку у вас будет столько потоков, как Channel.s

+0

Хорошо, вот что я подумал. –

+0

У меня теперь есть ** один ** экземпляр DefaultEventExecutorGroup (3) или каналы. С 'jstack' я заметил, что эти 3 потока находятся в состоянии ожидания. Используются ли они циклически? –

Смежные вопросы