【问题标题】:Detect if a HttpServlet's response is received successfully?检测是否成功接收到 HttpServlet 的响应?
【发布时间】:2014-07-21 08:23:32
【问题描述】:

如何检测客户端是否正确接收了 HttpServlet 发送的响应(例如 doPost() 或 doGet() 的结果)?我目前让客户端在收到对请求的特定响应后向服务器发送一个“确认”请求,但这可能是多余的。

我相信 Tcp 已经发送了确认,并且服务器应该知道响应是否已传递,或者这不是它的工作方式,我必须继续手动发送确认?

【问题讨论】:

    标签: java http servlets tcp


    【解决方案1】:

    我不会依赖 TCP。我会让客户端生成它收到的内容的sha1(),然后将其发送到服务器以确认成功接收。

    TCP 的内置校验和不够好,它们旨在实现极高的性能并牺牲可靠性来实现它。

    【讨论】:

    • 但是TCP不是完全可靠的,因为它不会丢失任何数据,否则会抛出错误?
    • TCP 不完全可靠。它很少会丢失数据,但它绝对会不时丢失数据而不会报告任何错误。频率取决于您的连接类型 - 使用 CAT6 以太网几乎不会发生,使用铜线电话线可能会经常发生。如果您的某处路由器出现故障,则每天可能会发生几次。
    • 基本上,如果您关心可靠性,您应该自己进行校验和,并使用可靠的散列函数,如 sha1
    • 最大的问题是 TCP 不报告错误,它会默默地修复它们。因此,如果您的交换机出现故障并每天造成数十亿次损坏,您将不会知道,因为 TCP 检测到并修复了它。除了时不时它会检测不到损坏 - TCP 使用的算法不够好,无法依赖。
    • 我并不是真的在谈论需要数据的完整性,而是更多地确认是否收到了任何数据(在 TCP 的情况下,这是全部还是全部正确?)。我现在将继续我的问题中提到的方法,这对我来说是多么多余。
    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2014-05-08
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多