1

如果要在浏览器和服务器之间打开双向连接,唯一的选择是轮询(锤击服务器),或者使用彗星(粗鲁且容易断开连接)。

为什么浏览器不让你打开一个普通的 TCP 连接?没有这种能力有什么实际好处吗?

4

5 回答 5

5

底层协议 HTTP 基本上是一个半双工通信协议,也是无状态的,不支持全双工通信。然而,随着 HTML 5 websockets 的出现,事情将会改变。Websockets 是 HTML 5 规范中正在考虑的新标准。一旦规范最终确定并且所有浏览器供应商都调整了标准,您就可以使用 websockets 通过浏览器本身建立专用的 TCP 连接。

我们还必须记住,HTTP 基本上是为了在地理分布的团队之间传递文档和共享信息而设计的,它本身并不是一种通信协议。

话虽如此,已经有公司构建了一些消息传递网关,使您能够实现全双工通信。

于 2009-05-09T05:02:45.410 回答
0

防火墙。非 HTTP 流量通常会被防火墙阻止,因此打开一个随机 TCP 端口进行通信通常会失败。

于 2010-03-11T13:51:39.600 回答
0

鉴于此功能可通过 flash 有效获得,因此没有真正的安全理由 - 但如今,没有浏览器希望成为第一个实现此类非标准扩展的浏览器。此外,没有简单的方法来处理线程,这可能会使使用套接字相当尴尬。

于 2009-05-09T05:01:57.517 回答
0

多年来,为了提供更丰富的体验,网络的许多方面或元素都被劫持了。Comet 只是一个例子,它利用长寿命连接来允许服务器端推送。最初,网页只是作为文本的超链接文档,而不是我们今天经常看到的丰富应用程序。对最初想法的攻击和滥用将继续存在,直到有一天这些事情变得更加标准化。

于 2009-05-09T05:07:08.193 回答
0

您的问题的答案基本上是否定的,无法在浏览器中打开客户端和服务器之间的双向连接没有明显的优势。不能这样做的原因很简单,这不是 Web 浏览器的意图,Web 浏览器是为轮询/检索文档而开发的。随着富 Internet 应用程序的出现,人们希望拥有这样的功能,但以前这从来不是浏览器的目标。目前,最终协议或现有协议的实现存在一个空白,该协议将管理浏览器和服务器之间的双向通信。现有技术用于在不同程度上模拟这种行为(AJAX、Comet 等),或者可以使用嵌入式对象(Java、Flash、

我们将只需要等待(或采取行动)编写标准并遵循实施。更有可能的是,实现实际上会首先出现,我们将有一大堆新的跨浏览器兼容性问题来享受:) 哦,最前沿!

于 2010-01-02T23:41:22.587 回答