在JAVA中将单线程服务器转换为多线程服务器
我需要将此单线程服务器转换为多线程服务器,以便能够处理来自服务器的多个请求:在JAVA中将单线程服务器转换为多线程服务器,java,sockets,server,client-server,Java,Sockets,Server,Client Server,我需要将此单线程服务器转换为多线程服务器,以便能够处理来自服务器的多个请求: public class YASGP { public static void main(String args[]) throws IOException { ServerSocket server; try{ server = new ServerSocket(5559); System.out.println("Listening
public class YASGP {
public static void main(String args[]) throws IOException {
ServerSocket server;
try{
server = new ServerSocket(5559);
System.out.println("Listening for connection on port 5559 ....");
while (true) {
Socket clientSocket = server.accept();
InputStreamReader isr = new InputStreamReader(clientSocket.getInputStream());
BufferedReader reader = new BufferedReader(isr);
String line = reader.readLine();
new Thread(new WorkerRunnable(clientSocket)).start();
while (!line.isEmpty()) {
System.out.println("----- " + line);
if (!line.contains("OPTIONS")) {
// System.out.println("Non c'è nulla!!!");
} else {
timeS = line.substring(line.indexOf("timeS=") + 6, line.indexOf("&url"));
url = line.substring(line.indexOf("url=") + 4, line.lastIndexOf("¶m"));
param = line.substring(line.indexOf("¶m=") + 7, line.indexOf("HTTP"));
}
line = reader.readLine();
}
}
}
}catch (IOException e) {
System.out.println("Could not listen on port: 4001");
}
}
private static class RequestHandlingClass {
public RequestHandlingClass(Socket clientSocket) {
}
}
}
我如何转换它?感谢所有从服务器中删除“客户端处理”代码,如下所示
public static void main(String args[]) throws IOException {
ServerSocket server;
try{
server = new ServerSocket(5559);
System.out.println("Listening for connection on port 5559 ....");
while (true) {
Socket clientSocket = server.accept();
new Thread(new WorkerRunnable(clientSocket)).start();
}
}catch (IOException e) {
System.out.println("Could not listen on port: 4001");
}
}
然后,您提取的代码进入workerRunnable类的run方法 我建议您使用excutorService api。因为它将在幕后为您管理所有线程问题
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
//Your code here
});
1.一个线程可以处理多个客户端连接。如果不为每个客户机启动一个新线程,应用程序的扩展性会更好。2.java和javascript是两种不同的语言。请仅选择一个。当前代码是否有效?奇怪的是,您如何为clientSocket生成一个新线程。目的是什么?我开始修改代码,是的,它适用于1个线程,其他线程否。有什么提示吗?我是编程新手:)@Luke-我知道程序在做什么,但它不正确。我问这个问题是希望你能弄明白。这是我的2便士。Server.accept()将被阻止,直到它收到输入。它下面的所有代码都应该放在一个新线程中以实现工作负载。在while循环中使用Server.accept()将处理更多的请求,因此这很好。如果您想让我重写代码,请告诉我?Diarmuid已经完成了:)请参阅答案2。