如何确认客户收到的回复

时间:2015-03-06 17:12:38

标签: java servlets jetty

我目前有一个客户 - >客户端定期推送数据的服务器模型。我在服务器上使用带有servlet的Jersey来响应传入的请求。

由于这是一个数据同步步骤,一旦服务器收到数据,就需要将OK消息返回给客户端。

作为测试,我做了一个服务器处理的路径" / testResponse"所有这一切都是这样的:

@GET
@Path("/testResponse")
@Produces(MediaType.TEXT_PLAIN)
public String GET_testResponse() {

    System.out.println("Received test request...");

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("Returning response...");

    return "message received!";

}

我想测试的是我从客户端发起请求,但是当客户端等待5秒钟时,客户端退出请求,模拟它与无线连接。在这5秒钟后,服务器返回消息(不会抛出任何错误)。

我的问题我想是很简单:服务器有没有办法知道客户端是否收到了响应,因为没有抛出异常等等?当你试图处理错误时应该抛出错误响应?我知道在球衣之外,你可以使用HttpServletResponse方法在函数退出之前实际响应,所以我想知道我是否需要这样的东西。

谢谢!

1 个答案:

答案 0 :(得分:4)

即使客户端完成了HTTP请求,服务器也无法知道客户端是否完全处理了响应。因此,最好设计服务器不需要知道客户端是否收到响应的系统

执行此操作的一种可能方法是发出请求idempotent。如果客户端可以确定请求失败,则可以再次尝试相同的请求,无论服务器是否已经处理了请求,结果都是相同的。因此,如果客户端在智能手机上,并且电池在客户端处理请求之前死亡,则下次启动客户端时,它可以检查是否有任何未完成的请求要发送,然后重试。