我有一个服务器,可以同时接收多个请求.
在我的服务器上,我必须做一些处理,然后等待响应。这个处理是由外部库完成的,所以我不知道要等多久。
因此,服务器如下所示:
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个客户端同时发送请求时,我如何确保不会出现问题。
先谢了
1条答案
按热度按时间0s7z1bwu1#
如何应对等待答案的问题?###
使用**while(true)**会产生问题,因为你阻塞了线程,打开子线程和多个流会使它变得更加复杂。有一种简单的方法叫做React式编程,它可以轻松地处理这种多线程问题,quarkus async solution和spring,如果你仍然想从java代码管理你的套接字,你可以使用akka
我如何确保当两个以上的客户端同时发送请求时不会出现问题。
这可以通过不阻塞主线程来实现,如果你设法使用React式和/或异步方法,你就不会有这个问题。
参考文献