我的同事和我正在开发一个与web服务通信的客户端应用程序,以便处理一些事务数据。以下是我们沟通的步骤:
timestamp = T1)timestamp ≈ T1)timestamp = T1 + few_seconds)timestamp = T1 + 3_minutes)timestamp = T1 + 3_minutes)我们的问题在于时间戳引用: web服务处理请求并几乎立即检索响应,但客户端应用程序在服务器关闭连接之前不会收到响应消息。以下是日志文件:
客户端应用程序日志片段:
10:46:25,031 INFO MessageHandler.java:115 Message sent.
10:49:25,071 INFO MessageHandler.java:125 Message received.
10:49:25,103 DEBUG MessageParser.java:67 Message parsed.服务器应用程序日志:
10:46:25:153 <INFO> Client connection accepted.
...
10:46:26:602 <INFO> Response message sent.
...
10:49:25:069 <INFO> Closing connection...如您所见,只有当服务器关闭连接时,客户端才会获得响应。
下面是进行通信的方法的客户端应用程序代码:
public static String sendMsg(byte[] msg, String serverIp, int port) {
try {
InetAddress address = InetAddress.getByName(serverIp);
Socket socket = new Socket(address, port);
OutputStream os = socket.getOutputStream();
logger.info("Message sent.");
os.write(msg, 0, msg.length);
os.flush();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String msgReceived = br.readLine();
logger.info("Message received.");
os.close();
return msgReceived;
} ...(catch blocks) ...
}假设我们无法更改web服务实现,在服务启动响应时(然后由客户端关闭连接),是否有一种方法可以立即在客户端获取响应消息?提前谢谢。
发布于 2016-08-29 16:41:31
听起来你不太可能从客户端做些什么。可能发生的情况是,web服务器正在缓冲来自webservice的响应(因此它可以设置内容长度、标题等)。因此,在webservice关闭连接之前,不会发送任何数据。通过使用br.read()方法读取数据的单个字符,而不是像现在这样一次读取整行数据,您可以间接地检验这一假设。
https://stackoverflow.com/questions/39211079
复制相似问题