一个服务器用于多个客户端Java

时间:2014-12-30 17:17:26

标签: java multithreading sockets tcp-ip

我在一个线程中有一个服务器套接字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中的每个请愿创建一个帖子?

2 个答案:

答案 0 :(得分:1)

1)我每次在服务器A中读取客户端时都应该创建一个线程来处理数据吗?

是。这些工作线程称为工作线程。如果您不这样做,则会在阅读和处理请求时阻止下一个请求。所以等待其他请求的时间会增加。

2)如果六个客户端同时向服务器A发送数据会怎样?

与上述相同。其中只有一个会活跃,其他人会等待。

3)我应该为服务器B中的每个请愿创建一个线程吗?

让您的工作线程处理与serverB的通信。

答案 1 :(得分:0)

1) - 是的,或者每个客户都必须等待服务器处理其他数据;

2 - 没有任何反应,只会创建6个线程,数据将被处理。如果您有一个具有6个内核的服务器,则很可能会同时处理每个请求,否则CPU将进行必要的调度;

3 - 如果对于每个客户端请求,服务器B也会收到请求,那么确定。

相关问题