場景:客戶端異步調用 WebLogic WebService(generateAsyncMethods=true 生成 startMethod/endMethod),若客戶端不等待結果直接退出,服務端是否保存結果?大量此類請求是否導致連接/記憶體洩漏?
@Oneway,客戶端發後即忘,無返回值,服務端不回應 SOAP 回覆。startXxx(params, AsyncInfo) 獲取 FutureResult,稍後調用 endXxx(FutureResult) 取結果。客戶端可輪詢 isCompleted() 或註冊 ResultListener 回調。startSayHello() → StubImpl._startAsyncInvoke() → DefaultOperation.asyncInvoke()
→ ClientDispatcher.asyncDispatch() → 建立 FutureResultImpl + 啟動接收線程
→ Http11ClientBinding.send() → 發送 HTTP 請求
關鍵點:接收線程由客戶端 JVM 啟動(getThreadPool().addTask()),負責讀取 HTTP 回應、填充 FutureResultImpl、觸發 Listener。
| 時機 | 請求狀態 | 連接狀態 | 結果處理 |
|---|---|---|---|
| 退出前已處理完 | 完成 | 已釋放 | 結果在 FutureResultImpl 中,隨客戶端 JVM 退出銷毀 |
| 退出時仍在處理 | 進行中 | 客戶端主動 Close → 服務端 OutputStream 仍存活 | 服務端寫完回應關閉 Socket,無接收者,數據丟棄 |
isCompleted() 設定最大等待時間,或註冊 Listener 內部控制。