检测服务器上的 HTTP 请求失败
Detecting HTTP Request fail on server
我正在开发一个 HTTP 服务器,它处理来自客户端的事务请求。他们将通过高度不可靠的无线网络进行通信,所以我担心服务器数据库上数据的一致性。以下是我处理 POST
请求的方式:
void doPost(request, response)
{
transaction = newTransaction();
processBody(request);
transaction.commit();
}
当我从未收到请求时,没有问题。客户只是得到 timeout error
并且没有执行任何交易。但是,如果 response 在网络上丢失会怎样?当然,客户端仍会收到 timeout error
,但这次交易将在客户端不知道的情况下在服务器上完成!这是我需要处理的不幸案例。
所以,我的问题是:如何检测响应是否已送达并回滚事务?
我使用 JavaEE 编写我的服务器应用程序并将其托管在 Glassfish 上。
好的,我想通了。 HTTP/TCP 协议栈没有检测响应丢弃 的工具。然而,它处理 request drop 非常好,所以我只需要从服务器向客户端发送 POST 请求,就像这样:
void doPost(request, response)
{
transaction = newTransaction();
try {
var result = processBody(request);
sendPOSTToClient(result);
transaction.commit();
catch (IOException e) {
transaction.rollback(); // network partition occured
}
}
我正在开发一个 HTTP 服务器,它处理来自客户端的事务请求。他们将通过高度不可靠的无线网络进行通信,所以我担心服务器数据库上数据的一致性。以下是我处理 POST
请求的方式:
void doPost(request, response)
{
transaction = newTransaction();
processBody(request);
transaction.commit();
}
当我从未收到请求时,没有问题。客户只是得到 timeout error
并且没有执行任何交易。但是,如果 response 在网络上丢失会怎样?当然,客户端仍会收到 timeout error
,但这次交易将在客户端不知道的情况下在服务器上完成!这是我需要处理的不幸案例。
所以,我的问题是:如何检测响应是否已送达并回滚事务?
我使用 JavaEE 编写我的服务器应用程序并将其托管在 Glassfish 上。
好的,我想通了。 HTTP/TCP 协议栈没有检测响应丢弃 的工具。然而,它处理 request drop 非常好,所以我只需要从服务器向客户端发送 POST 请求,就像这样:
void doPost(request, response)
{
transaction = newTransaction();
try {
var result = processBody(request);
sendPOSTToClient(result);
transaction.commit();
catch (IOException e) {
transaction.rollback(); // network partition occured
}
}