【发布时间】:2015-08-08 05:37:19
【问题描述】:
发送请求时服务器返回响应。这是正常的请求-响应机制,但问题是——有时服务器需要向客户端发送一些通知。
我使用 Keep-Alive 请求实现了这一点,即服务器将要发送的消息排队,并在 ALIVE 请求到来时作为响应发送。但这会在服务器上造成瓶颈,服务器无法检测到连接是否关闭。
我相信有办法解决这个问题。我尝试过,但由于.readObject 上的ObjectOutputStream 无法同时工作而失败了。
客户端打开与服务器的连接并创建以下流进行通信。
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();
}
}
【问题讨论】: