我有一個Netty HTTP服務器用作API服務器。用戶將事件發送到API服務器,並使用執行器服務或併發框架(如Akka)在同一服務器上的其他線程上處理事件。我有兩個答案選項;當我將事件發送到另一個線程時,我可以等待響應並將其寫入套接字或將確認消息寫回套接字。等待API服務器中的響應
當我等待響應時,http請求的延遲增加,服務器可以處理的請求數減少。另一方面,不能控制背壓,所以我們不知道服務器何時處理事件,並且我不能通知用戶服務器處理了事件。但是,服務器可以處理的http請求數量會增加,因爲幾乎所有請求的延遲都很低。
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof HttpRequest) {
executor.submit(new Event(msg));
// do not wait for the response
ctx.write(new DefaultFullHttpResponse(HTTP_1_1, OK));
}
}
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof HttpRequest) {
Future<Object> future = executor.submit(new Event(msg));
future.after(x -> ctx.write(new DefaultFullHttpResponse(HTTP_1_1, OK)));
}
}
因爲它是一個API服務器,我沒有等待,以便通知被處理事件的用戶的響應,因爲它只是一個寫請求不返回響應。那麼對於http服務器來說哪種方式最爲方便,您認爲第二種方式值得其性能受益嗎?
那麼問題是什麼? – biziclop 2014-10-26 18:31:12
我更新了問題@biziclop – Boyolame 2014-10-26 19:01:57