浏览器向服务器发出请求后,中途关闭浏览器了,服务器会如何反应

孙大诚_SunRobin 2016-10-08 04:12:26
最近在思考一个问题,比如说浏览器向服务器发生了一次请求,而且在服务器端处理的时候还很耗时,中途浏览器被突然关闭了,那么服务器处理到一半了能感知到么?

如果能感知到,会怎么处理?如果不能感觉到,会继续完成整个的处理流程,那么最后它发现无法返回数据怎么办?是在哪一步发现的
...全文
2737 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
software_artisan 2016-10-10
  • 打赏
  • 举报
回复
服务器并不知道你关掉了浏览器。。。
孙大诚_SunRobin 2016-10-10
  • 打赏
  • 举报
回复
小灰狼 2016-10-10
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
你的协议应该是围绕着“极端的事物”而设计的 --> 你的协议应该是围绕着“极短的事务”而设计的 一个持续100分钟的事务的设计就是“错误的”,它应该在100毫秒之内就返回(而不是等待结束),剩下的东西异步执行,而且可以离散地反馈。这才是“架构设计”。
当今 ajax 大行其道时,对耗时操作基本上都是这个思路,把任务交给后台启动,立刻响应,然后客户端用 ajax 轮询任务状态 当然你也可以用 websocket
  • 打赏
  • 举报
回复
你的协议应该是围绕着“极端的事物”而设计的 --> 你的协议应该是围绕着“极短的事务”而设计的 一个持续100分钟的事务的设计就是“错误的”,它应该在100毫秒之内就返回(而不是等待结束),剩下的东西异步执行,而且可以离散地反馈。这才是“架构设计”。
  • 打赏
  • 举报
回复
asp.net 可以通过 Response.IsClientConnected() 函数来“测试”客户端是否在线。其它设计也是类似。 但是一般来说,如果你处理大型系统,你的协议应该是围绕着“极端的事物”而设计的。例如传送1G大的文件,可能不用10毫秒就结束了(只需要比较一下MD5),可能不用10秒钟钟就结束了(仅仅传送部分修改过的磁盘块),也可能用很长时间才能传送完毕。但是总之它在逻辑协议中是离散和并发的,而不是持续和顺序的。 当你的逻辑设计就是 hang 住服务器的时候,你可能考虑的所谓“优化”仍然是这个思路,而没有从离散、异步的角度去设计。这就好像是有些人总是纠结与个别语句用什么编程语言的“优化”而不知道从逻辑上去优化算法,这总归是放到小伎俩中去研究的。 因为通常架构师都是通过改变逻辑算法,将通讯改为并发、离散形式,来优化系统。而并不是纠结于个别语句。
正怒月神 版主 2016-10-09
  • 打赏
  • 举报
回复
服务器继续执行。
闭包客 2016-10-09
  • 打赏
  • 举报
回复
引用 12 楼 sundacheng1989 的回复:
比如说在Chrome浏览器中,只要下边的这个加载标志还在浏览器的tab页面中转啊转,就说明这次的TCP连接还没有断开。
网管!JIRA 挂了!
孙大诚_SunRobin 2016-10-09
  • 打赏
  • 举报
回复
比如说在Chrome浏览器中,只要下边的这个加载标志还在浏览器的tab页面中转啊转,就说明这次的TCP连接还没有断开。

孙大诚_SunRobin 2016-10-09
  • 打赏
  • 举报
回复
引用 10 楼 peiyuanxin 的回复:
你关闭浏览器服务端也不知道。
对的,这是对的。到最后服务器端负责TCP传输的部门才会最终发现这个问题。
慢步前行 2016-10-08
  • 打赏
  • 举报
回复
你关闭浏览器服务端也不知道。
闭包客 2016-10-08
  • 打赏
  • 举报
回复
有道理,多思考总是好的。
孙大诚_SunRobin 2016-10-08
  • 打赏
  • 举报
回复
我个人觉得,倒是最后C#代码还是会把最终的字符串放到操作系统给这个进程分配的TCP缓冲区中。在操作系统负责TCP发送的部门负责发送这些数据的时候,根据报文中的信息要与浏览器建立连接,但是此时发现连接建立不上了。操作系统的TCP负责部门就默默的抛弃了这一次的数据。
孙大诚_SunRobin 2016-10-08
  • 打赏
  • 举报
回复
引用 3 楼 pengqian098 的回复:
因为http协议是没有状态的协议,服务端根本不知道你已经关闭了客户端(browser)
http协议的无状态是指的前后两次网页请求。一个web request与一个web response本质上说还是处在一个TCP连接里边。浏览器与服务器建立连接,然后发送request,接受服务器的response,最后关闭连接。
孙大诚_SunRobin 2016-10-08
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
继续处理直到输出为止 最简单的模拟方式就是Debug,你可以调试加断点,然后关网页(确认关掉后不能退出debug)
那是在哪一步发现的呢?从更高的角度来讲,当走完所有的流程后,它发现跟浏览器的连接断掉了,就是默默的这个异常吞掉了。表现的行为就是什么都不做。
闭包客 2016-10-08
  • 打赏
  • 举报
回复
服务器很笨,啥都不知道。
跳动de指尖 2016-10-08
  • 打赏
  • 举报
回复
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传
跳动de指尖 2016-10-08
  • 打赏
  • 举报
回复
因为http协议是没有状态的协议,服务端根本不知道你已经关闭了客户端(browser)
跳动de指尖 2016-10-08
  • 打赏
  • 举报
回复
服务端继续执行啊,到任务完成 跟你关闭浏览器什么并没有什么关系。
  • 打赏
  • 举报
回复 1
继续处理直到输出为止
最简单的模拟方式就是Debug,你可以调试加断点,然后关网页(确认关掉后不能退出debug)

62,241

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧