經過相當多的研究之後,我決定繼續寫下一個在堆棧溢出中可能看起來相當多餘的問題,但我只是問,因爲我沒有找到我的答案。我一直對Java NIO2框架有一些樂趣,它極大地提高了我的應用程序的可伸縮性。 (我們之前使用舊式I/O TPC服務器/客戶端設置來安裝一些適度的模擬服務器),並讓我告訴你。如果你知道我的意思,那麼併發是B皇后。異步檢索SQL查詢執行結果。
我們正在從使用線程作爲所有事情的答案(試圖更好地實踐並更熟悉推進技術)。以前,我們爲用戶數據使用平面文件存儲(文本/二進制格式存儲),並將所有內容都遷移到SQL數據庫。
雖然這樣做我已經注意到通常沒有問題,但是在數據庫上等待永遠不會有趣,並且在模擬的遊戲環境中等待數據庫調用從來沒有樂趣,尤其是當整個遊戲服務器在等待。這是我們通常會替換線程的地方。爲什麼不只是使用Thread pool
或類似的命令在另一個線程上執行SQL調用。
對於任何類型的異步事件,Java NIO2 CompletableFuture<K,V>
確實是一個很大的幫助,但是我一直在試圖找到一種將這種方法用於SQL調用的方法。我認爲編寫我們自己的使用NIO2的JDBC版本始終是一種選擇,但它看起來有點過度消耗,可能需要更多的時間和金錢。請記住,我們只是一個小型模擬社區,而不是一個大型企業,但我們確實想確保爲用戶提供質量。
我正在調查jooQ
這似乎沒問題,但它也似乎有點過分殺。這使用CompletableFuture#supplyAsych
方法,但可用的例子並沒有真正解釋它的深入。但是它混在這句話:
總是會有一個阻隔屏障這樣的解決方案,那就是 JDBC本身 - 這是很難變成一個異步API。實際上,很少數據庫確實支持異步查詢執行。
但是,數據庫不一定需要支持異步查詢執行,才能在異步上下文中提供結果。如果我的服務器沒有等待(只等待)API才能獲得查詢結果,那麼這是唯一真正重要的事情。與此相似的活動可以使用來自Unity的腳本參考的示例來解釋:CoRoutines。
請不要推薦Scala。
您*可能*想要查看[異步jdbc調用可能嗎?]的答案(http://stackoverflow.com/questions/4087696/is-asynchronous-jdbc-call-possible)。 –
@ PM77-1感謝您的鏈接,但我已閱讀該頁面上的所有內容。它在幾年前被問過,似乎沒有得到最近的關注。 – Hobbyist
@ Christian.tucker - 10如何回答不太重視?說真的,如果你想讓人們更多地關注它,那麼**正確的方式就是發佈獎勵。 –