http - 在服务器上检测 HTTP 请求失败
问题描述
我正在开发一个 HTTP 服务器,它处理来自客户端的事务请求。他们将通过高度不可靠的无线网络进行通信,因此我担心服务器数据库上数据的一致性。以下是我处理POST
请求的方式:
void doPost(request, response)
{
transaction = newTransaction();
processBody(request);
transaction.commit();
}
当我从未收到请求时,没有问题。客户端只是获取timeout error
并且不执行任何事务。但是,如果响应在网络上丢失会发生什么?当然,客户端仍然会收到timeout error
,但这次事务将在服务器上完成,而客户端并不知道!这是我需要处理的不幸案例。
所以,我的问题是:我如何检测是否已交付响应并回滚事务?
我使用 JavaEE 编写服务器应用程序并将其托管在 Glassfish 上。
解决方案
好的,我想通了这一点。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
}
}
推荐阅读
- snowflake-cloud-data-platform - 移动表格并撤销所有权限
- python - 删除所有非字母字符,保留字符串中的空格
- javascript - 存储过程未从 nodejs post api 调用执行
- php - Symfony 4 - DomPdf 在 Heroku 的生产环境中不起作用:奇怪的字符
- wpf - 如何对齐 GridViewColumn 标题?
- python-2.7 - 从长时间戳转换为日期时间
- pythonanywhere - 将照片上传到网站并在烧瓶 python 上提交时出现“未找到”错误
- django - Django prefetch_related
- python - Python Multiprocessing (Flask) - 从主进程调用函数
- excel - 使用 SelectionChange 函数更改 ActiveX 控件按钮标题