Java Netty,如何实现在关闭通道之前发送响应(503)的HTTP连接限制器

Java Netty,如何实现在关闭通道之前发送响应(503)的HTTP连接限制器,java,netty,Java,Netty,目前,在我的管道中,我有一个简单的处理程序,可以在服务器过载时拒绝连接: public class RequestFilter extends SimpleChannelHandler { @Override public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception { requestLimit

目前,在我的管道中,我有一个简单的处理程序,可以在服务器过载时拒绝连接:

    public class RequestFilter extends SimpleChannelHandler {

    @Override
    public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception {
            requestLimiter(ctx, e);
            super.channelConnected(ctx, e);
    }
}

private void requestLimiter(final ChannelHandlerContext ctx, final ChannelStateEvent e) {
            if(threshold < counter) {
             ctx.getChannel().close();
            }
    }
有什么想法或例子我可以看看吗?谢谢

编辑:stacktrace

java.lang.IllegalStateException: cannot send more responses than requests
    at org.jboss.netty.handler.codec.http.HttpContentEncoder.writeRequested(HttpContentEncoder.java:104)
    at org.jboss.netty.handler.timeout.WriteTimeoutHandler.writeRequested(WriteTimeoutHandler.java:152)
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:262)
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.handleDownstream(ChunkedWriteHandler.java:119)
    at org.jboss.netty.handler.execution.ExecutionHandler.handleDownstream(ExecutionHandler.java:165)
    at org.jboss.netty.channel.Channels.write(Channels.java:605)
    at org.jboss.netty.channel.Channels.write(Channels.java:572)
    at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:245)
    at com.test.RequestFilter.sendResponse(RequestFilter.java:98)

我不认为它发出了多重回应。我认为它正在[尝试]发送一个,这比零请求的数量多了一个,因为事件是由连接通道事件触发的,管道还没有看到任何http请求

我会将您的代码更改为不在connect上执行此操作,而是在第一次请求时触发503响应。如果通道随后关闭,adios client,但如果客户端的第一个请求在阈值以下潜入,则从管道中移除bouncer(假设客户端一旦进入,它们将永远进入)


有意义吗?

您的最终案例是“不可能发生”代码。张贴你的堆栈跟踪。显然,它正在发送多个响应(谁会发出砰的一声)。你能发送一个响应来看看什么时候会发生吗?如果无法以编程方式监视传输,则可以使用wireshark监视传输
java.lang.IllegalStateException: cannot send more responses than requests
    at org.jboss.netty.handler.codec.http.HttpContentEncoder.writeRequested(HttpContentEncoder.java:104)
    at org.jboss.netty.handler.timeout.WriteTimeoutHandler.writeRequested(WriteTimeoutHandler.java:152)
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:262)
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.handleDownstream(ChunkedWriteHandler.java:119)
    at org.jboss.netty.handler.execution.ExecutionHandler.handleDownstream(ExecutionHandler.java:165)
    at org.jboss.netty.channel.Channels.write(Channels.java:605)
    at org.jboss.netty.channel.Channels.write(Channels.java:572)
    at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:245)
    at com.test.RequestFilter.sendResponse(RequestFilter.java:98)