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

时间:2012-02-21 07:20:55

标签: web-applications client-server communication

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

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

所以,我的问题是:

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

3 个答案:

答案 0 :(得分:7)

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

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

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

我个人处理了很多旧的浏览器,所以ajax民意调查将成为我的首选。假设这是一个半长时间运行的过程,每2-5秒进行一次轮询不应该过多地扰乱用户。这对于实时聊天或其他任何东西都不好,但对于“我解析了你的200M excel文件”它应该没问题。

答案 1 :(得分:0)

有三种常见的技术可以解决此问题:

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

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

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

答案 2 :(得分:-2)

有很多技术可用,如使用虚拟SMTP任何交换服务器和其他电子邮件服务器,如雅虎,谷歌 看看这个link可以在这方面帮助你