gpt4 book ai didi

java - 在几个时间间隔后将数据发送到 servlet

转载 作者:行者123 更新时间:2023-11-28 22:39:28 25 4
gpt4 key购买 nike

我想创建一个 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 被调用,但是它被完全执行并且不等待从客户端发送的数据。如何让它发挥作用?它应该在那里等待来自客户端的新数据。任何帮助将不胜感激。谢谢你

最佳答案

您要找的是WebSocket .

这是一种允许将初始 HTTP 连接“升级”为客户端或服务器可以随时发送消息的持久连接的协议(protocol)。

它与标准 HTTP servlet 样式的 Web 应用程序截然不同,因此您必须大量更改您的应用程序以应对它。但是您的用例正是创建 Websocket 的原因。

Apache Tomcat 附带了一些 Websocket 示例(客户端和服务器),如果您想了解其中的一些示例是如何完成的。

关于java - 在几个时间间隔后将数据发送到 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51115145/

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