netty是否接收事件并发? DownStream和Upsream事件怎么样?

时间:2011-12-28 12:03:10

标签: java events concurrency netty

活动文档 http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/ChannelEvent.html

例如: 可以同时获得两个活动吗?

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    Thread.sleep(10000);
}

如果messageReceived需要很长时间,我可以在另一个线程中收到另一条消息吗? 或者netty有所有事件的队列吗?

另一个例子

int i=0;

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    i++;
}

增量是否正确?

另一个问题。

上游事件和下游事件是否同时发生?

3 个答案:

答案 0 :(得分:4)

这不完全正确..

如果为每个通道使用新的处理程序实例,则不需要使它们成为线程安全的。唯一的例外是当您实现DownstreamHandler时,因为任何线程都可以触发下游事件。

因此,只要您关心ChannelUpstreamHandler,就不需要任何同步(如果每个通道使用一个处理程序)

答案 1 :(得分:1)

在javadoc中找到

线程安全

handleUpstream将由同一个线程(即I / O线程)按顺序调用,因此处理程序无需担心在上一个上游事件完成之前使用新的上游事件进行调用。

线程安全

handleDownstream可以由多个线程同时调用。如果处理程序访问共享资源或存储有状态信息,则可能需要在处理程序实现中进行适当的同步。

messageReceived是Upstream事件,将按顺序调用

答案 2 :(得分:0)

是的,netty框架保留了一个线程池。它会同时调用尽可能多的'messageRecieved'方法,因为它有线程。您执行的每个方法都需要是线程安全的。