也希望提供相关文章链接--我不知道该搜索什么术语。
我想了解一下Web应用程序如何实现服务器到客户端通信。我知道Web并不是为此设计的,这一直是一个障碍,我想知道它的现状以及最佳实践是什么。
另一种方法是通过Ajax进行常规或偶发轮询,但Web服务器是否能够维护与Web客户端的有状态连接呢?
编辑:另一个问题是StackOverflow是如何告诉页面有新帖子可用于显示顶部的小栏的?
也希望提供相关文章链接--我不知道该搜索什么术语。
我想了解一下Web应用程序如何实现服务器到客户端通信。我知道Web并不是为此设计的,这一直是一个障碍,我想知道它的现状以及最佳实践是什么。
另一种方法是通过Ajax进行常规或偶发轮询,但Web服务器是否能够维护与Web客户端的有状态连接呢?
编辑:另一个问题是StackOverflow是如何告诉页面有新帖子可用于显示顶部的小栏的?
StackOverflow会轮询服务器以检查是否有更多的数据。
您要寻找的是Comet技术。
要从浏览器获得真正的双向通信,您需要使用像Silverlight、Flash等插件技术。这些插件可以创建TCP连接,可以与服务器套接字建立双向持久连接。请注意,您无法真正与HTTP服务器建立TCP连接,因此您需要创建一个额外的服务器代理来进行与浏览器的通信。
基本上,这是与AJAX网站(如Stackoverflow、Gmail等)使用的完全不同的部署模型。它们都依赖于浏览器定期轮询服务器。
网页浏览器并不适合处理这种类型的通信。通信是单向的,其中Web服务器在端口(通常为80或443)上侦听要发送到它的信息。
我刚刚阅读了有关彗星的链接,这是一种有趣的方法,但必须记住的是,它仍然是由客户端打开的。服务器正在发送代码以供其执行,但浏览器最终控制并确定服务器何时与其通信。
使用今天的Web浏览器,服务器在没有浏览器帮助的情况下无法从技术上执行发送给它的消息。从技术上讲,您可能可以通过在客户端计算机上执行某些Active X控件来解决这个问题...但我还没有尝试过。
你不能这样做,HTTP是无状态的。很久以前Netscape实现了HTTP Push,但它并不成功。
我会使用轮询与Web服务或类似的方式;没有插件(如Flash、Java、Silverlight)有权限在其沙盒中使用原始套接字,因此试图以这种方式实现将是浪费时间。