ServerSocket Java的最佳方法

时间:2014-11-05 11:25:59

标签: java multithreading sockets osgi serversocket

我在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框架,即使你不认为这与问题相关(以防万一......)。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以简单地执行在ExecutorService中处理消息的代码。

就像那样:

//Outside the handler:
pool = Executors.newFixedThreadPool(poolSize);

// On message receipt
message = in.next();
pool.execute(new MessageHandler(message));

因此,您可以通过设置poolSize进行精确扩展。

所以我想那就是方法2