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

Web applications 如何在web应用程序中从服务器向客户端发送消息,web-applications,client-server,communication,Web Applications,Client Server,Communication,最近,我遇到了这种需要。客户端(web浏览器)请求在服务器端异步完成任务,然后客户端将其丢弃 当服务器完成任务时,它将通过发送一些消息通知客户端 所以,我的问题是: 有没有一种方法可以从服务器端主动向客户端发送消息(纯文本、json等)?有很多可用的技术,如使用虚拟SMTP、任何exchange服务器和其他电子邮件服务器,如yahoo、google等 在这方面,这可能会对您有所帮助。在我脑海中浮现出两种可能的解决方案: 第一个最常见(也是最安全)的解决方案可能是AJAX长轮询,即在客户端上设置A

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

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

所以,我的问题是:


有没有一种方法可以从服务器端主动向客户端发送消息(纯文本、json等)?

有很多可用的技术,如使用虚拟SMTP、任何exchange服务器和其他电子邮件服务器,如yahoo、google等
在这方面,这可能会对您有所帮助。

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

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

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


我个人和很多老浏览器打交道,所以ajax轮询将是我的首选。假设这是一个半长时间运行的过程,每2-5秒轮询一次应该不会让用户太不安。这对实时聊天或任何事情都不好,但对于“我解析了你的200M excel文件”来说应该没问题。

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

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

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

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


  • 只是想澄清一下,如果您的示例意味着用户实际上离开了将进行轮询的页面(即关闭浏览器、转到另一个站点等),我想不出任何方法来保持这种连接。如果这是您的示例,那么可能应该研究另一种通知系统。(可能是电子邮件)你想做什么?某种情景可能会有所帮助。您正在使用哪些服务器端和客户端工具?例如PHP(服务器)和Javascript(客户端)。或者它是不同的东西(例如Java、C等等)。简短回答:是的,这是可能的。更详细的回答需要一些附加信息:)。