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)