【发布时间】:2018-12-09 10:34:07
【问题描述】:
我想创建一个 Servlet,我可以在一段时间后向其发送数据(GET/POST 无关紧要)。这将类似于从客户端到服务器的持久连接。使用这个单一连接,我将不时向 Servlet 发送一些数据(字符串),数据将在其中进行处理。这样我就不必每次要发送数据时都建立新的连接。
我目前尝试的。这是我的纯 Java 客户端:
try {
URL url = new URL("http://localhost:8080/MyProject/MyServletName");
HttpURLConnection connnection = (HttpURLConnection) url.openConnection();
connnection.setRequestMethod("GET");
connnection.setRequestProperty("Connection", "keep-alive");
connnection.setDoOutput(true);
OutputStream writer = connnection.getOutputStream();
String message = "message-";
int counter = 0;
while (counter < 30) {
Thread.sleep(1000);
message = "message-" + counter;
writer.write(message.getBytes());
writer.flush();
counter++;
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
因此,理想情况下,该客户端会将数据写入输出流并在 1 秒后刷新。我应该在我的 Servlet 中得到同样的结果。这是我的 servlet 代码(doGet 方法):
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
现在 servlet 应该在每一秒之后打印从客户端收到的行。但这里的问题是 servlet 甚至没有被调用。如果我在我的客户端类中添加以下行。
int HttpResult = connnection.getResponseCode();
然后servlet被调用,但它被完全执行并且不等待从客户端发送的数据。将如何使其发挥作用?它应该在那里等待来自客户端的新数据。任何帮助都将不胜感激。谢谢你
【问题讨论】:
-
您正在读取 servlet 中的行,但客户端不会写入任何 EOL 字符。所以 servlet 阻塞,等待行结束。
-
所以基本上你想要一个以 N 间隔发送数据的客户端和一个始终运行的持久服务器?
-
@Aris 是的,我想建立一个持久连接。然后在一段时间后定期将数据发送给它
标签: java tomcat servlets jakarta-ee persistent-connection