我想创建一个Web应用程序,它能够在客户端访问某些URL(例如www.example.com/ping/hello)后“ping”客户端,以便获得服务器和客户端之间的往返时间。通过“ping”请求,我的意思是一个简单的请求,带有来自服务器和客户端的时间戳,并发送回时间戳的响应。我希望如果可能的话,使用单个URL完成此活动。
流程是这样的:
到目前为止,我只能完成第一步和第二步,但不知道如何确保客户端再次访问相同的URL而不返回第一步。
我的服务器代码是这样的:
@GET
@Path("/helloping")
public Response getPingServerClient(@Context HttpServletRequest req) {
String result = Long.toString(System.currentTimeMillis());
return Response.status(200).entity(result).build();
//the code to receive the response from client containing timestamp
}
有没有办法做到这一点?
有两个客户端到服务器调用。您必须找出区分这两个调用的方法。
我可以为此目的考虑3个选项:
请求/响应流程将是这样的:
Client -> Server : Request
Server -> Client : Response with timestamp t1
Client -> Server : Request with timestamp t2 and the above mentioned marker
Server -> Client : Response 200
在这种方法中,您必须在服务器端和客户端编写自定义代码来处理上述逻辑。
我不喜欢你提出的建议,因为你基本上迫使客户设置代码以有效地成为服务器本身。这对客户来说不方便。
相反,考虑一种乒乓方法,客户端首先调用服务器的ping
端点,该端点返回服务器的时间戳。一旦客户端获得服务器的ping
响应,就会指示客户端调用第二个pong
方法,该方法接受新的时间戳。
要求客户端调用Web服务方法比强制客户端成为伪服务器更容易,更简单。因此建议。