【发布时间】:2016-05-24 19:55:02
【问题描述】:
我正在用 Java 编写一个 UDP 服务器,它处理来自多个客户端的数据包,然后对其进行处理。我所做的是服务器正在侦听数据包,一旦收到数据包,它就会产生一个新线程来处理它。
以下是示例代码:-
公共无效运行() {
try
{
serverSocket = new DatagramSocket(5676);
while(true)
{
byte[] receiveDataBuf = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveDataBuf,receiveDataBuf.length);
serverSocket.receive(receivePacket);
String sentence = new String(receiveDataBuf,0,receivePacket.getLength());
ReqHandler rh= new ReqHandler (sentence);
rh.start();
}
}
catch(Exception e)
{
}
}
由于非常频繁地收到客户端请求。问题是当我检查 CPU 百分比时,它占用了 20-30 % {有时高于 30 %}。 我认为这可能是因为 ReqHandler 类处理充当 while(true) 的数据。 我该如何处理?或者是否有任何其他方式来实现可以同时处理“n”个请求的服务器 {concurrently in database} 。
注意:- ReqHandler 正在处理数据库中的数据。
【问题讨论】:
-
为什么不直接使用 Netty? netty.io
-
你所做的基本上是如何编写服务器的v1.0。这没有错,这是显而易见的做事方式。这是它的预期问题。线程池(让线程等待并准备好获取数据)是下一步。
-
正如我在回复@Peter Lawey 的回复时所说,即使在使用 executor service 之后,应用程序使用的 cpu 百分比也很高。那我该如何解决呢?
标签: java multithreading server udp