gpt4 book ai didi

java - Java中服务器如何向客户端发送消息

转载 作者:行者123 更新时间:2023-12-01 11:30:16 26 4
gpt4 key购买 nike

发送请求时,服务器返回响应。这是正常的请求响应机制,但问题是——有时服务器需要向客户端发送一些通知。

我使用 Keep-Alive 请求实现了这一点,即服务器将要发送的消息排队,并在 ALIVE 请求到来时作为响应发送。但这会在服务器上造成瓶颈,服务器无法检测连接是否关闭。

我相信有一种方法可以解决这个问题。我尝试过,但失败了,因为 ObjectOutputStream 上的 .readObject 无法同时工作。

客户端打开与服务器的连接并创建以下流进行通信。

ObjectOutputStream obos;
ObjectInputStream obis;
public Response send(Request req){
Response resp=null;
try {
obos.writeObject(req); //request from Client
resp=( Response )obis.readObject(); //Reply from server
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return resp;
}

public void run(){
asyncReceive();
}

void asyncReceive(){ //notifications from server
try {
Message m=(Message)obis.readObject();
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}

最佳答案

您也许可以使用两个不同的线程来处理接收和发送。

发送线程可以使用线程安全的消息队列来发送,因此只要队列为空,它就会阻塞。您可以在计时器任务线程中定期将消息添加到队列中以进行通知,或作为对客户端请求的响应。

我认为如果套接字同时关闭,readObject() 应该抛出异常。

关于java - Java中服务器如何向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30460359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com