【发布时间】:2016-08-27 03:51:04
【问题描述】:
我需要将这个单线程服务器转换为多线程服务器,这样我就可以处理来自服务器的多个请求:
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) {
}
}
}
我如何转换它?谢谢大家
【问题讨论】:
-
1.一个线程可以处理多个客户端连接。如果您不为每个客户端启动一个新线程,应用程序将更好地扩展。 2. java 和 javascript 是两种不同的语言。请只选择一个。
-
当前代码是否有效?您如何为 clientSocket 生成一个新线程很奇怪。目的是什么?
-
我开始修改代码,是的,它适用于 1 个线程,其他一个没有。任何提示?我是编码新手 :)
-
@Luke - 我了解程序在做什么,但它不正确。我问了这个问题,希望你能弄清楚。这是我的 2p 价值。 Server.accept() 将被阻止,直到它收到输入。它下面的所有代码都应该放在一个新线程中来实现工作负载。在 while 循环中使用 Server.accept() 将处理更多请求,所以它很好。如果您希望我重写该代码,请告诉我?
-
Diarmuid 已经完成了 :) 参见答案 #2。
标签: java sockets server client-server