将完整的HTML内容推回客户端时,如何避免在服务器端创建临时文件?
时间:2020-03-05 18:58:24 来源:igfitidea点击:
在Tomcat上运行的服务器端应用程序中,我基于从Internet下拉的用户请求的随机站点生成完整的HTML页面(带有标头)。客户端应用程序使用异步回调来请求处理特定网页。由于处理可能需要一段时间,因此我想通过轮询来告知用户进度,因此要通知回调。
在服务器端,检索网页后,将对其进行处理并创建"增强"版本。然后,该版本必须返回给用户。
不能将页面显示为客户端应用程序页面的一部分。
当前,服务器会生成一个临时文件并发送回指向该文件的链接。这显然是次优的。
我可以想到的下一个最佳解决方案是创建一个缓存数据库,该数据库将HTML内容及其md5-sums或者sha1-ids存储在一起,然后将哈希ID作为参数,将链接发送回servlet。然后,该Servlet从缓存DB请求该站点。
有没有更好的解决方案?如果没有,我们会建议哪个数据库后端?我在考虑SQLite。要解决的部分问题是:如何将页面<html>推到</ html>并返回客户端?
解决方案
回答
如果不需要真正的持久性,那么如何使用诸如memcached之类的更具临时性的内容代替SQL?调用语义非常干净和容易,当然我们可以手动终止数据,ttl或者@ restart。
回答
我们可以创建一个内存缓冲区,填充它,然后将其作为响应发送(使用mime类型的'text / html'服务),而不是创建一个临时文件,填满它,然后发送一个链接。如果我们不想立即发送页面缓冲区,则可以将其保存以供以后在用户会话中使用。如果我们担心以这种方式占用过多的内存,则可能只想在内存中保留一定数量的页面缓冲区,然后将其余的页面缓冲区写入磁盘以供以后检索。使用DB听起来有点过分(毕竟,不涉及任何关系信息),但它可以很好地解决缓存问题。