我在一個Java項目的類中有一個ServerSocket
。這個套接字接收一些導致新行爲的命令。例如:ServerSocket的最佳方法Java
deleteAllFromDB
- >刪除DB上的所有條目。
sendMsgToX
- >建立了一個發送到X.
像一個新的消息:
in = new Scanner(s.getInputStream());
message = in.next();
if (message.equalsIgnoreCase("deleteAllFromDB"){
//code
//more code
//even more code
}
...
好吧,我想你想到這個主意(這是相當簡單,但我使用示例因爲我的英語技能可能會讓觀衆感到困惑)。
問題是,類內部的方法變得越來越重,所以套接字不會讀取傳入的消息,直到方法執行完成。
我想我有2種方法來解決這個問題:
1.多線程服務器
而不是處理在同一個線程傳入的請求,接受客戶端連接時,連接交給處理請求的工作線程
http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html
2.螺紋方法
一旦予讀取傳入請求(message=in.next()
),I啓動一個線程負責的方法被執行(deleteFromDB, sendMsgToX
等)。
任何意見將非常感激。另外,只需要提一下,我正在使用OSGi框架,即使你不認爲這與問題相關(以防萬一..)。
在此先感謝!
你考慮使用OSGi外殼(勾勾)的支持,可以方便地掛接到一個插座會話? – 2014-11-05 13:28:57
你期望同時有多少客戶? 你需要區分不同的客戶嗎?可以同時執行命令(因爲有一個數據庫你不得不擔心事務和原子性)? – Yuri 2014-11-05 16:13:40
你有一個'Socket'。一個'ServerSocket'不能接收命令。 – EJP 2016-11-29 00:19:43