![](/img/trans.png)
[英]Java proxy server keep client connection alive while switching servers
[英]How to keep the client and server connection alive in webservice for StreamingOutput
我的網絡服務代碼
final StreamingOutput stream = new StreamingOutput() {
@Override
public void write(final OutputStream out) {
dao.getData(
query,
new SdmxObserver(writerFactory.getDataWriter(sdmxFormat, out, properties), request
.getRemoteAddr(), request.getHeader("User-Agent"), query.toString(), sdmxFormat
.toString(), query.getlist()));
}
};
res = Response.ok(stream, MediaType.valueOf("application/vnd.sdmx.genericdata+xml;version=2.1"))
.cacheControl(cc).lastModified(lastModified).header("Vary", "Accept,Accept-Encoding").build();
return res;
用於檢索數據的數據庫調用耗時很長,因此,當我們使用代理時,它有2分鍾的超時,因此,由於2分鍾之內不是來自數據庫的數據,因此顯示連接超時。 盡管我們使用了StreamingOutput,但是為什么沒有進行流傳輸來保持連接有效呢? 同樣,如果我們繞過代理,那么我們可以從Web服務成功獲取數據。
但是我們無法更改代理設置,並且我們需要在使用或不使用代理的情況下使用該應用程序。
您的代理服務器很可能會在配置的超時后簡單地終止連接,無論您是否正在傳輸數據。 如果您想知道, Connection: keep-alive
標頭僅指示可以將同一連接重用於多個請求/響應( RFC7230 ),則不應控制單個連接的超時。
嘗試與您的代理管理員聯系:
Keep-alive: timeout=10000
,但也可能完全不同,或者根本不可能) 如果仍然無法解決問題,那么您可能需要重新考慮設計並采用其他方法,例如Spring Data +可分頁的資源,或者,如果您覺得很勇敢,可以使用Spring Integration + Splitter模式進行異步處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.