我在Java项目的一个类中有一个ServerSocket
。此套接字接收一些导致新操作的命令。例如:
deleteAllFromDB
- >删除数据库中的所有条目。
sendMsgToX
- >创建发送到X的新消息。
类似的东西:
in = new Scanner(s.getInputStream());
message = in.next();
if (message.equalsIgnoreCase("deleteAllFromDB"){
//code
//more code
//even more code
}
...
好吧,我认为你有了这个想法(它非常简单,但我使用的例子是因为我的英语技能可能让观众感到困惑)。
问题是类中的方法变得越来越大,所以socket在执行和完成方法之前不会读取传入的消息。
我认为我有两种方法可以解决这个问题:
1。多线程服务器
不是在接受客户端连接的同一线程中处理传入请求,而是将连接切换到处理请求的工作线程
http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html
2。线程方法
一旦我读取传入请求(message=in.next()
),我就会启动一个负责执行方法的线程(deleteFromDB, sendMsgToX
等)。
任何建议都会非常感激。另外,我要说的是,我正在使用OSGi框架,即使你不认为这与问题相关(以防万一......)。
提前致谢!
答案 0 :(得分:0)
您可以简单地执行在ExecutorService中处理消息的代码。
就像那样:
//Outside the handler:
pool = Executors.newFixedThreadPool(poolSize);
// On message receipt
message = in.next();
pool.execute(new MessageHandler(message));
因此,您可以通过设置poolSize进行精确扩展。
所以我想那就是方法2