需求
在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作。需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打印出取件小票。
技术难点
- 手机端点击取货,浏览器如何感知到,如何做相应的操作(本文要解决的问题)
- 浏览器感知后,如何调用打印服务,进行按照相应的模版打印
技术方案及选型
不断轮询(pull的方式)
所谓不断轮询,就是浏览器保持发送请求,检查服务器是否有新信息返回,服务器对于每次请求均应立即响应。这种方式需要设定合理的时间间隔。例如:邮件客户端可以每隔几分钟检查服务器是否有新邮件。
优点
简单,可靠
局限性
效率不高。如果需要及时获得服务器信息,那么轮询频率就必须非常高,导致服务端压力较大。更适合小型应用。
长轮询(pull的方式)
浏览器发送请求,但是服务器不予以响应,一直到服务器有了新信息才响应客户端。从客户端的角度看它和传统的轮询相同。但从服务器端的角度来看它与传统的轮询相比,减少了服务器端的开销。
例子:网页版聊天工具如webqq(摘抄):
1.用户在网页上发送聊天信息时,网页会给服务器发送请求,服务器将聊天数据存储下来;
2.网页也会向服务器请求