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

Send data to servlet after several time interval

我想创建一个 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 甚至没有被调用。如果我在我的客户端 class 中添加以下行。

int HttpResult = connnection.getResponseCode();

然后servlet 被调用,但是它被完全执行并且不等待从客户端发送的数据。如何让它发挥作用?它应该在那里等待来自客户端的新数据。任何帮助将不胜感激。谢谢

如果您想使用 Servlet API,您将受到其请求-响应性质的限制(每个请求都是一个新连接)。通常情况下,创建一个HTTP请求没什么大不了的,执行起来还是比较快的,所以每次都可以执行。但是如果它(连接创建时间)对你的情况真的很重要,你可以考虑像套接字这样的东西。使用套接字,您可以完全控制连接生命周期。这种方法的缺点是低级别 API,据我所知,它需要与 Servlet 分开使用。

您要找的是WebSocket

这是一种允许初始 HTTP 连接 "upgraded" 到客户端或服务器可以随时发送消息的持久连接的协议。

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

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