对于不那么短期间的请求,并且用户取消了连接(即,他/她在请求完成之前关闭了浏览器),那么服务器端会发生什么呢?
但它应该依赖于服务器。但是常见的方式是什么?
某些请求需要相当长的时间才能完成,例如,分布式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();
}
我应该吗?
答案 0 :(得分:0)
问题:
解决方案:
service(request, response) { try { client_start(request); tx_start(); do_all_work(); tx_commit(); } catch(CanceledException ce) { tx_rollback(); throw ce; } finally { client_join(); } } client_start(request) { client = new Client(request); client_thread = new Thread(client).start(); } client_join() { client_thread.join(1000); // wait 1s for the client thread to end }