使用Socket控制前后端的数据交换和Web应用的资源消耗

自从学会了使用Socket搭建一个简单的服务器并实现它同客户端通信,我就一直很想在实际的工作中用上这个我很喜欢的功能,而其中最让我容易想到的就是利用它来管理进程开始和停止的时机。但在之前的好几次尝试中,我要么在过程中就发现有比Socket简单得多而且也有效的方法,要么就是最后发现即使用Socket也实现不了我的想法,只得另寻他路。这也算是成了我工作中一个不大不小的执念。

直到最近,我使用Django在后台构建了一个Web应用,由于其功能需要需要在后台运行,且会长时间消耗服务器的大量(5%-10%)计算资源,但用户可能不一定需要等这个程序全部运行完成就能得到他想要的结果。所以出于对降低服务器负载的考虑,我需要让它尽可能达到这样一种情况——一旦用户不再需要这个程序继续工作,程序就能马上停止。

如果这个程序是运行在前端的,那么很简单——一旦用户关闭了网页或跳转到别的页面,程序的运行就会自然终止了。然而我这个程序是运行在后端的。大家都知道http协议是一种无状态的协议,也就是说,就算你在网页上设计了一个关闭的开关,如果用户能记得按它还好。如果用户忘了按它(事实上我相信大部分时候用户都会忘记,让我来用,我觉得我也很可能忘记),你就得想其他办法了。

当然,你可以在用户尝试退出页面的时候弹一个提示框,提示用户是否确定要离开该页面?如果用户选择是,网页就知道这个程序该停了,可是问题是,此时一切的变化都还只发生在前端,如何让后端知道这个变化已经发生呢,从另一方面来说,后端在程序运行输出结果之后,又如何告知前端呢?

由于我对Socket的执念,我几乎第一时间就决定,要用Socket来做这个功能。经过不懈的尝试,我终于成功用Socket完成了这个功能,现在就跟大家分享一下完成的过程。

功能规划

其实对于一个单一页面的web应用来说,用户的使用逻辑还算是比较好预测的了。开始程序的方法,自然是只有按下”开始“按钮一种。而当用户不再需要这个程序继续运行的时候,一共也就只有三种行为:一是按下我们提供的”结束搜索“按钮(不太可能),二是通过各种手段(包括不限于点击网页标签页的关闭键、关闭浏览器、直接关机等)关闭网页,三是直接去到其他页面。后两种本质是一样的。而且都可以用弹窗提示是否离开来确定发送停止信号的时机。但如果用户通过比较强行的手段关闭浏览器(忽略了提示),则仍然可能会导致前端没机会向后端发出停止信号。而考虑到只要解决了网页在被强行关闭的时候也能让后端程序停止,就自然能让网页在正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值