java 在服务器中多个客户端之间同步

ykejflvf  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(171)

我有一个服务器,可以同时接收多个请求.
在我的服务器上,我必须做一些处理,然后等待响应。这个处理是由外部库完成的,所以我不知道要等多久。
因此,服务器如下所示:

public class MyServer{

@Override
//method from the library
public void workonRequest(){
   //---
   response=[...] 
   
}

    public void listenRequest() {
        new Thread(() -> {
            while (true) {
                try {
                    socket = server.accept();
                    ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
                    ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
                    socket.setTcpNoDelay(true); //TODO : Not sure !
                    new Thread(() -> {
                        try {
                            handleRequest(input, output);
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }).start();
                } catch (IOException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }).start();
    }

所述句柄请求方法为:

public void handleRequest(ObjectInputStream input, ObjectOutputStream output) throws IOException {
        try {
            while (true) {
            //forward the request to the library
            //work on it [means using the library and waiting]
            // return response 
           }
}

}

response对象是我想要返回给客户端的结果
1.如何应对等待答案的难题?
1.当超过2个客户端同时发送请求时,我如何确保不会出现问题。
先谢了

0s7z1bwu

0s7z1bwu1#

如何应对等待答案的问题?###

使用**while(true)**会产生问题,因为你阻塞了线程,打开子线程和多个流会使它变得更加复杂。有一种简单的方法叫做React式编程,它可以轻松地处理这种多线程问题,quarkus async solutionspring,如果你仍然想从java代码管理你的套接字,你可以使用akka

我如何确保当两个以上的客户端同时发送请求时不会出现问题。

这可以通过不阻塞主线程来实现,如果你设法使用React式和/或异步方法,你就不会有这个问题。
参考文献

相关问题