我想创建一个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甚至没有被调用。如果我在client类中添加以下代码行。
int HttpResult = connnection.getResponseCode();
然后调用servlet,但它被完全执行,并且不等待从客户端发送的数据。它将如何工作?它应该在那里等待来自客户端的新数据。任何帮助都会得到重视。谢谢
发布于 2018-06-30 22:04:11
如果您想使用Servlet API,您将受到其请求-响应性质的限制(每个请求都是一个新连接)。通常,创建HTTP请求并不是什么大问题,它的执行速度相对较快,所以每次都可以执行。但是,如果它(连接创建时间)对您的情况真的很重要,那么您可以考虑将其视为套接字。使用socket,您可以完全控制连接生命周期。这种方法的缺点是低级API,据我所知,它需要与Servlets分开使用。
https://stackoverflow.com/questions/51115145
复制相似问题