在服务器上检测到HTTP请求失败

时间:2019-03-14 14:00:10

标签: http java-ee transactions client-server distributed-system

我正在开发一个HTTP服务器,该服务器处理来自客户端的事务请求。他们将通过高度不可靠的无线网络进行通信,因此我担心服务器DB上数据的一致性。这是我处理POST请求的方式:

void doPost(request, response)
{
    transaction = newTransaction();
    processBody(request);
    transaction.commit();
}

当我从未收到请求时,没有问题。客户仅获得timeout error,并且不执行任何交易。但是,如果响应在网络上丢失了怎么办?当然,客户仍然会收到timeout error,但是这次交易将在服务器上完成,而客户却不知道!这是我需要处理的不幸案例。

所以,我的问题是:如何检测是否已交付响应,否则如何回滚事务?

我使用JavaEE编写服务器应用程序代码,并将其托管在Glassfish中。

1 个答案:

答案 0 :(得分:0)

好,我知道了这个。 HTTP / TCP协议栈不具有检测响应下降的功能。但是,它很好地处理了请求删除,因此我只需要将POST请求从服务器发送到客户端,就像这样:

void doPost(request, response)
{
    transaction = newTransaction();
    try {
        var result = processBody(request);
        sendPOSTToClient(result);
        transaction.commit();
    catch (IOException e) {
        transaction.rollback(); // network partition occured
    }
}