最近我就遇到了这样的需求。客户端(Web 浏览器)请求在服务器端异步完成任务,然后客户端将其抛在后面。
当服务器完成任务时,它会通过发送一些消息来通知客户端。
所以,我的问题是:
有没有办法让服务器端主动向客户端发送消息(纯文本、json等)?
我的脑海中浮现出两种可能的解决方案:
第一个、最常见(也是最安全)的解决方案可能是 AJAX 长轮询,即在客户端上设置 ajax 查询以定期发出请求并对响应执行某些操作。例如,设置一个资源,在服务器端处理完成时返回“已完成”消息。鉴于您的问题,这并不理想,但它肯定是可行且相当可靠的。
要实际使用推送技术(这正是您所要求的,但不一定是您真正需要的),您应该看看WebSockets。如果您查看该链接,您将在文章正文中看到支持该技术的浏览器列表,并且根据您的用例,您可能希望也可能不希望进一步调查。
我个人使用过很多旧浏览器,因此 ajax 轮询将是我的首选。假设这是一个半长时间运行的过程,每 2-5 秒轮询一次不会让用户感到太不安。这对于实时聊天什么的都不好,但是对于“我解析了你的 200M excel 文件”来说应该没问题。
解决此问题的常用技术有以下三种:
XMLHttpRequest - 使用
XMLHttpRequest
对象从客户端(Web 浏览器)向 Web 服务器发出定期请求,以查看是否有新信息可用。这种技术通常称为“轮询”。轮询的缺点是,在客户端请求之前,服务器无法传输消息。
- 使用 EventSource
对象创建一个回调,该回调在 Web 服务器发送新消息时执行。这种技术通常称为“服务器推送”。服务器推送的缺点是 Internet Explorer 和 Edge 目前不支持它,并且 Web 服务器不知道客户端是否已停止侦听,直到服务器尝试发送消息。
WebSocket
对象创建双向通信通道,以便服务器可以随时向客户端发送消息,反之亦然。该技术比前两种方法使用更多的网络资源,并且更常用于必须立即双向发送消息的聊天程序。
😡😡😡😡😡😡😡😡😡😡 👅👅👅👅👅👅👅👅👅👅 AUKAT MN REH KR BAAT KR JITNA HAWA MEIN UCHAAL RHA HAI NA ITNA ZAMEEEN MEIN GHUSA DOUN GAE 😡😡
CHAL NAKAL JA PHLI FULTI MN 😡😡
WARRNA MANO TUMHARA BELGAAA MUKA DY GAE 😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡 😡😡😡😡😡😡😡😡马诺马诺马诺三世 TUR JAO TUR JAO KUTOOO MANOOO III 😡😡😡😡😡😡😡😡😡 马诺是世界上最伟大的拳击手
AIK BAAR JO MANO 承诺 KRTI HAI FIR WO APNY DMGH KI V NI SUNATI 😡😡😡😡😡😡马诺比利在这里😡😡😡