是否可以随时从服务器向Web浏览器发送消息?

时间:2010-12-20 14:29:38

标签: http

我希望能够通过我的网站向访问者通知服务器上发生的事件。

想:

  • 网站访问者正在等待需要很长时间并在服务器后台运行的导出或报告,需要在导出完成后通知访问者。

  • 网站访问者正在等待来自销售代表的聊天消息,需要在向他们发送消息时通知访问者。

我可以想到几种方法:

  • 保持与服务器的HTTP连接 永远开放
  • 继续投票 HTTP服务器每秒检查一次 有新消息
  • 写一篇Java 保持连接打开的applet 到Java服务器进程

这些似乎都不是特别优雅的解决方案......有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

HTTP是客户端 - 服务器协议,因此它不允许服务器发起的通信。

此方案有许多变通方法,您已经提出了大多数变通方法。

  1. 最常见,技术含量最低的技术就是投票。当您搜索航班时,您可以在大多数在线旅行社上看到这一点。
  2. 保持连接打开直到超时,然后再打开另一个等待服务器发送内容的连接称为Comet,它以多种方式实现,有时甚至使用Java Applet。
  3. 最新的标准方法是使用WebSockets,它为您提供全双工(双向)频道,您可以在其中执行任何操作。它是一种全新的协议,只需打开连接即可处理HTTP。唯一的缺点是它相当新,所以检查浏览器兼容性。查看demos

答案 1 :(得分:0)

就我而言,解决此问题的最佳方法是让客户端轮询服务器。我不知道有什么方法可以强制信息到客户的浏览器。

我认为从某种JavaScript / AJAX中进行投票是理想的。

答案 2 :(得分:0)

据我所知,你无法从java applet打开套接字(通过网络接口连接)。这是安全政策的一部分。