什么将常用的网络服务器做的时候用户取消的请求?

对于不那么短周期的要求,并取消了连接的用户(例如,他/她关闭浏览器完成请求之前),将在服务器端发生什么呢?

它应该是服务器的依赖,虽然。 但是,这将是常见的方式?

一些请求采取相当长的时间来完成,例如,分布式数据库管理系统的事务,这将数据提交到不同国家的几个不同的服务器。 (我知道在银行的应用程序,是很常见的)

一些请求发送一大块数据给客户端,例如,当用户下载大的附件。

它应该取消请求的线程特定超时后?

如果我的web应用程序照顾用户的活动,并取消交易自己是这样的:

service(request, response): tx_start(); do { do_some_work() if (user_canceled) break; do_some_work() if (user_canceled) break; do_some_work() if (user_canceled) break; do_some_work() if (user_canceled) break; do_some_work() if (user_canceled) break; tx_commit(); return; } while (false); tx_rollback(); throw new CanceledException(); }

我是不是该?

--------------解决方案-------------

问题:

  • 如果do​​_some_work()需要更长的时间比预期的客户端连接去世,do_some_work()时,可以不再需要该交易继续进行。

解决方案:

  • 单独的服务器的事务工作,并使用另一个线程客户端输入。
  • 让客户中断do_all_work(),然后抛出CanceledException。

服务(请求,响应){
尝试{
client_start(请求);
TX_START();
do_all_work();
tx_commit();
}赶上(CanceledException CE){
tx_rollback();
扔CE;
} {最后
client_join();
}
}

client_start(要求){
客户=新客户端(请求);
client_thread =新主题(客户端)。开始();
}

client_join(){
client_thread.join(1000); //等待1秒的客户端线程结束
}

分类:HTTP 时间:2015-03-15 人气:0
本文关键词: HTTP,交易取消
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.463 (s). 10 q(s)