如何在Web应用程序中从服务器向客户端发送消息

问题描述 投票:0回答:3

最近我就遇到了这样的需求。客户端(Web 浏览器)请求在服务器端异步完成任务,然后客户端将其抛在后面。

当服务器完成任务时,它会通过发送一些消息来通知客户端。

所以,我的问题是:

有没有办法让服务器端主动向客户端发送消息(纯文本、json等)?

web-applications client-server communication
3个回答
9
投票

我的脑海中浮现出两种可能的解决方案:

第一个、最常见(也是最安全)的解决方案可能是 AJAX 长轮询,即在客户端上设置 ajax 查询以定期发出请求并对响应执行某些操作。例如,设置一个资源,在服务器端处理完成时返回“已完成”消息。鉴于您的问题,这并不理想,但它肯定是可行且相当可靠的。

要实际使用推送技术(这正是您所要求的,但不一定是您真正需要的),您应该看看WebSockets。如果您查看该链接,您将在文章正文中看到支持该技术的浏览器列表,并且根据您的用例,您可能希望也可能不希望进一步调查。

我个人使用过很多旧浏览器,因此 ajax 轮询将是我的首选。假设这是一个半长时间运行的过程,每 2-5 秒轮询一次不会让用户感到太不安。这对于实时聊天什么的都不好,但是对于“我解析了你的 200M excel 文件”来说应该没问题。


7
投票

解决此问题的常用技术有以下三种:

  1. XMLHttpRequest - 使用

    XMLHttpRequest
    对象从客户端(Web 浏览器)向 Web 服务器发出定期请求,以查看是否有新信息可用。这种技术通常称为“轮询”。轮询的缺点是,在客户端请求之前,服务器无法传输消息。

  2. 服务器发送事件

    - 使用 EventSource 对象创建一个回调,该回调在 Web 服务器发送新消息时执行。这种技术通常称为“服务器推送”。服务器推送的缺点是 Internet Explorer 和 Edge 目前不支持它,并且 Web 服务器不知道客户端是否已停止侦听,直到服务器尝试发送消息。

    
    

    WebSockets
  3. - 使用
  4. WebSocket

    对象创建双向通信通道,以便服务器可以随时向客户端发送消息,反之亦然。该技术比前两种方法使用更多的网络资源,并且更常用于必须立即双向发送消息的聊天程序。

        

  5. 马诺比利在这里😡😡😡😡 马诺·图姆哈里·贝汉·科·南加·KR·迪·盖·巴扎尔·梅因 马诺·西潘加 MTLB ZNDGI 西·哈斯·杜·贝斯纳 MANOO JAB ATII HAI TW 游戏 BJAAA DALTI HAI 马诺·艾克·胡夫·卡纳姆·海·乔·图姆里·切赫里·PR·萨夫·萨夫·德凯·迪·拉哈·海 AJ SY 没有 MAFII 没有没有 KHALAFI 仅有 SAB MANO 副本 😡😡😡

0
投票

😡😡😡😡😡😡😡😡😡😡 👅👅👅👅👅👅👅👅👅👅 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 😡😡😡😡😡😡马诺比利在这里😡😡😡

© www.soinside.com 2019 - 2024. All rights reserved.