如何在netty中从HTTP服务器请求处理程序正确调用HTTP客户端?
我正在用netty 3.3.1开发自定义HTTP服务器 我需要实现这样的东西如何在netty中从HTTP服务器请求处理程序正确调用HTTP客户端?,http,events,netty,Http,Events,Netty,我正在用netty 3.3.1开发自定义HTTP服务器 我需要实现这样的东西 HTTP服务器接收请求 HTTP服务器解析它并将HTTP请求作为客户端调用给其他机器 HTTP服务器等待(2)中发送的请求响应 HTTP服务器根据在(3)中接收到的内容发送对来自(1)的请求的响应 这意味着客户端请求(2)的行为必须是同步的 我所写的是基于,但它不起作用,因为我收到 java.lang.IllegalStateException: await*() in I/O thread causes a dea
java.lang.IllegalStateException:
await*() in I/O thread causes a dead lock or sudden performance drop. Use addListener() instead or call await*() from a different thread.
我已经根据上面提到的示例进行了重构,现在看起来不像这样了(从HttpSnoopClient的第7f行开始):
上面示例中的run()
命令在my herver处理程序的messageReceived
函数中调用
因此它变成了异步的,避免了等待*函数。请求被正确调用。但是——我不知道为什么——这条线
bootstrap.releaseExternalResources(); // DOES NOT WORK?
不起作用。它抛出了一个异常,表示我无法终止当前使用的线程(这听起来很合理,但仍然没有给出如何以不同的方式完成此任务的答案)
我也不确定这是正确的方法吗
也许你可以推荐一本关于netty中此类事件编程技术的教程?一般来说,如何处理几个异步请求,这些请求必须按指定的顺序调用并互相等待
谢谢,如果您真的想在关闭时释放引导,可以这样做:
channel.getCloseFuture().addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
System.err.println("Disconnected");
new Thread(new Runnable() {
public void run() {
bootstrap.releaseExternalResources();
}
}).start();
}
});
嗨,你解决这个问题了吗?我也在这样做。
channel.getCloseFuture().addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
System.err.println("Disconnected");
new Thread(new Runnable() {
public void run() {
bootstrap.releaseExternalResources();
}
}).start();
}
});