我在一个线程中有一个服务器套接字A,听取请愿。 我将有六个客户端使用相同的服务器(可能在同一时间)。 服务器A读取数据,对其执行某些操作并将数据发送到另一个服务器套接字B。
代码: 服务器A
public class ServerA implements Runnable{
@Override
public void run() {
this.Hilo();
}
public void Hilo(){
String dataIn;
ServerSocket socket;
try {
socket = new ServerSocket(6000);
System.out.println("Server on...");
while(true) {
Socket connectionSocket = socket.accept();
BufferedReader client = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
dataIn = client.readLine();
if (dataIn!= null){
// dataInPlus = SomeMethod(dataIn)
// Send dataInPlus to server B
}
}
}catch (Exception ex) {
System.out.println("Error");
}
}
1)我每次在服务器A中读取客户端时都应该创建一个线程来处理数据吗?
2)¿如果六个客户端同时向服务器A发送数据会怎样?
3)¿我应该为服务器B中的每个请愿创建一个帖子?
答案 0 :(得分:1)
1)我每次在服务器A中读取客户端时都应该创建一个线程来处理数据吗?
是。这些工作线程称为工作线程。如果您不这样做,则会在阅读和处理请求时阻止下一个请求。所以等待其他请求的时间会增加。
2)如果六个客户端同时向服务器A发送数据会怎样?
与上述相同。其中只有一个会活跃,其他人会等待。
3)我应该为服务器B中的每个请愿创建一个线程吗?
让您的工作线程处理与serverB的通信。
答案 1 :(得分:0)
1) - 是的,或者每个客户都必须等待服务器处理其他数据;
2 - 没有任何反应,只会创建6个线程,数据将被处理。如果您有一个具有6个内核的服务器,则很可能会同时处理每个请求,否则CPU将进行必要的调度;
3 - 如果对于每个客户端请求,服务器B也会收到请求,那么确定。