我正在开发一个Web应用程序,我正在使用轮询方法来检查是否需要更新。这些轮询请求每隔1或2秒发生一次。如果不需要更新(在这种情况下返回空响应),则响应的大小为240字节,大约10 KB,这是内容本身的大小。我的问题是,因为它大约每秒返回至少240 B,是否有办法通过更多地推动边界来优化此响应?
当我检查响应的内容时,我看到50个字节对我来说是必不可少的(会话ID和状态代码)。但是,标题中有一些信息,例如连接类型,超时和内容类型。对于这种类型的每个请求,这些设置都是相同的(即,它始终要求内容类型为:" text / html; carset = utf-8")。那么,我可以在客户端假设这些设置并阻止服务器发送这些头信息吗?
我在服务器端使用django,jQuery用于发送ajax请求。此外,任何类型的推送技术目前都是不可能的。
答案 0 :(得分:2)
它确实加起来,但没有你想象的那么多。如果您每秒轮询一整小时,那么您只使用了864K,而不是一个典型的网页需要一个未打开的缓存。即使你做了一整天,你也在谈论约20M。也许如果你是像Twitter这样的人,你可能需要关注这一点,但我怀疑你是否会接近这个实际上存在问题所需的流量。
尽管如此,您当然可以自定义请求的标头,但如果对客户端产生的任何影响将是测试的问题。有些标题可能会被删除,但其他标题可能会让您大吃一惊,从技术上讲,浏览器也可能不同。
答案 1 :(得分:1)
这种问题的一个解决方案是“长轮询”。轮询客户端将发送请求,Web服务器会检查是否有更新。如果没有,则Web服务器会休眠一两秒,然后再循环检查,而不发送响应。一旦此循环看到更新,它就会发送响应。对于客户端Web浏览器,它看起来像服务器拥塞并需要很长时间才能响应,但实际上相关数据正在迅速传输,并且只是跳过了“无数据”响应。
我建议在循环中添加一个超时 - 比如30或60秒 - 之后网络服务器会照常回复“无数据”。即使仅仅30秒的周期也会使空响应负载减少15-30倍。
警告:我已经读过这种实现,但我自己没有尝试过。您需要测试与各种Web浏览器的兼容性,以确保这种相当不标准的方法不会在客户端引起问题。