【发布时间】:2011-05-09 06:35:55
【问题描述】:
对于一个周期不短的请求,用户取消了连接(即他/她在请求完成之前关闭了浏览器),那么服务器端会发生什么?
不过,它应该取决于服务器。但是常见的方法是什么?
有些请求需要相当长的时间才能完成,例如,一个分布式 DBMS 事务,它会将数据提交到不同国家的多个不同服务器。 (我知道这在银行应用程序中很常见)
有些请求会向客户端发送大量数据,例如,当用户下载大型附件时。
是否应该在特定超时后取消请求线程?
我的网络应用程序是否应该照顾用户活动,并像这样自己取消交易:
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();
}
我应该吗?
【问题讨论】:
-
我带着同样的问题来到这里。如果用户在长请求期间关闭窗口,IIS 会做什么?我的期望是 IIS 会让线程完成但丢弃输出。否则我们的代码将需要处理中断的逻辑。
标签: http transactions cancellation