我在Java中使用套接字服务器,在PHP中使用其他侧面套接字客户端
我想通过多线程同时在java中处理来自PHP的套接字请求但是java一个接一个地执行,等待完成第一个请求并启动第二个请求,
这是我在JAVA中的代码:
while (true) {
try {
clientSocket = serverSocket.accept();
int i = 0;
for (i = 0; i < maxClientsCount; i++) {
if (threads[i] == null) {
(threads[i] = new clientThread(clientSocket, threads)).start();
break;
}
}
if (i == maxClientsCount) {
PrintStream os = new PrintStream(clientSocket.getOutputStream());
os.println("Server too busy. Try later.");
os.close();
clientSocket.close();
}
} catch (IOException e) {
System.out.println(e);
}
}
class clientThread extends Thread {
public clientThread(Socket clientSocket, clientThread[] threads) {
this.clientSocket = clientSocket;
this.threads = threads;
maxClientsCount = threads.length;
}
public void run() {
int maxClientsCount = this.maxClientsCount;
clientThread[] threads = this.threads;
try {
in = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
URL aURL = new URL(RecivedURL);
// start out put
System.out.println("host = " + aURL.getHost());
// end out put
BOLD行是我的输出示例,但我想同时同时启动多启动请求的输出.JAvA等我的代码一次完成请求..
答案 0 :(得分:1)
我不明白你为什么要在这里找到两个以上的线程。
如果您想逐个处理请求,您可能只生成一个只侦听请求的线程,并通过发送“处理”或“稍后再检查”消息立即响应它。 (称之为监听器线程)
如果向客户端发送“处理”响应,则连接保持活动,并生成另一个线程,该线程使用实际处理的请求结果响应客户端。 (称之为处理线程)。
您可以让侦听器线程向队列中的客户端发送保持活动消息,或者您可以要求它在一段时间后通过请求进行检查。您可以通过设置队列来决定何时随后响应发送“稍后再回来”消息的客户端,使侦听器线程更复杂
从实现POV开始,你的主线程可能是你的监听器线程,它可以在处理请求时产生一个处理线程。
答案 1 :(得分:1)
我认为它的执行速度太快,以至于在下一个请求被接受之前完成了最后一个请求。
出于调试目的,请尝试添加:
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
进入run方法,这样你就可以更容易地检查它是否真的没有并行运行。