我正在开发一个HTTP服务器,该服务器处理来自客户端的事务请求。他们将通过高度不可靠的无线网络进行通信,因此我担心服务器DB上数据的一致性。这是我处理POST
请求的方式:
void doPost(request, response)
{
transaction = newTransaction();
processBody(request);
transaction.commit();
}
当我从未收到请求时,没有问题。客户仅获得timeout error
,并且不执行任何交易。但是,如果响应在网络上丢失了怎么办?当然,客户仍然会收到timeout error
,但是这次交易将在服务器上完成,而客户却不知道!这是我需要处理的不幸案例。
所以,我的问题是:如何检测是否已交付响应,否则如何回滚事务?
我使用JavaEE编写服务器应用程序代码,并将其托管在Glassfish中。
答案 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
}
}