我使用一個基於servlet的碼頭做RPC,我有一個問題,需要較長時間的請求拋出服務器上的以下異常:問題與SocketTimeoutException和Jetty
2012- 02-11 21:07:07,673 [btpool0-4] DEBUG org.mortbay.log - EXCEPTION java.net.SocketTimeoutException:讀取超時 at java.net.SocketInputStream.socketRead0(Native Method) at java.net。 SocketInputStream.read(Unknown Source) at org.mortbay.io.ByteArrayBuffer.readFrom(ByteArrayBuffer.java:168) at org.mortbay.io.bio.StreamEndPoint.fill(StreamEndPoint.java:99) at org.mortbay.jetty.bio.SocketConnector $ Connection.fill(SocketConnector .java:190) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:277) at org.mortbay.jetty.HttpParser .parseAvailable(HttpParser.java:203) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357) at org.mortbay.jetty.bio.SocketConnector $ Connection.run(SocketConnector。 java:217) at org.mortbay.thread.BoundedThreadPool $ PoolThread.run(BoundedThreadPool .java:475)2012-02-11 21:07:07,674 [btpool0-4] DEBUG org.mortbay.log - EOF
我試着設置Connection,Keep-Alive http請求屬性,但是沒有任何效果,從我能收集的信息來看,http 1.1(我很確定我使用的是)默認是持久的。
因此,我認爲有2種方式我可以嘗試解決這個問題:
- 弄清楚如何防止超時異常被 在所有
扔在客戶端問題,而初始請求等待 的迴應,然後用平單獨的請求,檢查時 服務器完成。
更新(2012/2/12):我設置maxIdleTime蒂姆建議並沒有延長時間發生超時之前,但後來我開始一個新的異常:
2012 -02-11 23:24:01187 [btpool0-1] DEBUG org.mortbay.log - 異常 java.io.IOException的:一個現有的連接被強制通過在sun.nio.ch.SocketDispatcher.read0的 遠程主機關閉(本機方法)在 sun.nio.ch.SocketDispatcher.read(來源不明)維持在 sun.nio.ch.IOUtil.readIntoNativeBuffer(來源不明) sun.nio.ch.SocketChannelImpl.read(Unknown Source)at org.mortbay.io.nio.ChannelEndPoint.fill(ChannelEndPoint.java:129)at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:277)處 org.mortbay.jetty.HttpConnection.handle org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:203)(HttpConnection.java :357)at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:329) at org.mortbay.thread.BoundedThreadPool $ PoolThread.run(BoundedThreadPool。java:475)
因此,Jetty之外的某些東西正在導致連接中斷,我懷疑它很可能是防火牆。所以我最終做的是讓服務器用多個線程處理請求;原始線程會立即響應http請求,並且第二個線程將被啓動以執行需要很長時間的操作。然後,客戶端將使用http請求進行輪詢,以檢查服務器上的操作何時完成。
什麼版本? – Tim 2012-02-12 04:57:28
更快地提出請求。 – Bill 2012-02-12 05:04:33