如何从Web浏览器(客户端)建立TCP套接字连接?

时间:2011-11-08 13:57:42

标签: ajax flash sockets applet websocket

我读过 WebSockets ,但它们似乎不是纯粹的“套接字”,因为它们上面有一个应用程序层协议。 “ WS:

有没有办法从网络浏览器进行纯套接字连接,搞活网页?

这是我在黑暗中的随机刺伤

  • Java提供的Applet套接字(需要安装java)
  • Flash提供的Flash插槽(需要安装闪存)

但是关于HTML5,如果它们不是套接字,为什么它们被称为WebSockets?

websocket协议是如此简单实现,以至于它几乎是“套接字”?

5 个答案:

答案 0 :(得分:48)

  

我读过WebSockets,但它们似乎不是纯粹的“套接字”,因为它们上面有一个应用程序层协议。

     

[websocket协议]实现起来如此简单,以至于“几乎”是“套接字”吗?

直接从浏览器允许常规套接字连接永远不会发生,因为它会带来巨大的风险。 WebSockets与您将获得的浏览器中的原始套接字非常接近。初始WebSockets握手类似于HTTP握手(允许Web服务器代理/桥接它)并添加CORS类型安全性。此外,WebSockets是一种基于消息的传输(而不是作为原始TCP的流传输),这是通过在每个消息帧上使用两个字节的头来完成的。

即使flash也无法完全建立原始TCP连接。闪存套接字还添加了CORS安全性,但闪存套接字连接不是带内握手,而是与目标服务器上的端口843建立连接以请求安全策略文件。

  

有没有办法从网络浏览器进行纯套接字连接,搞活网页?

是的,您可以使用我的websockify网桥/代理,它允许支持WebSockets的浏览器通过websockify直接连接到TCP套接字。

  

但是关于HTML5,如果它们不是套接字,为什么它们被称为WebSockets?

WebSockets是基于TCP套接字构建的传输。在握手之后,开销非常小(通常只有两个字节的标头)。

答案 1 :(得分:4)

我无法改善卡纳卡对你的次要问题的答案,我知道这个问题已经有一年了。但是对于主要问题,Is there any way of doing a pure socket connection from a web browser, to enliven webpages?有一个名为Java / JavaScript Socket Bridge的项目,可能就是您(或通过Google搜索来到此页面的任何人)正在寻找的项目。与其他人提到的相比,这种方法的优点是它不需要运行客户端服务或服务器端服务。因此,例如,如果您想纯粹在JavaScript中实现IRC客户端,但您的Web主机不允许您有足够的权限来代理连接,那么这个Java小程序就是您的选择。唯一的问题是确保客户端安装并允许Java。

答案 2 :(得分:2)

您可以使用WebSockets在客户端和服务器之间发送数据。简单来说,WebSockets引入的唯一区别是客户端:

  • 添加一些标头字节,如数据类型和长度
  • 添加掩码并使用它们对数据进行编码

服务器还必须添加头字节,但不需要对数据进行编码。

如果正确实现协议(服务器端,即浏览器已有实现),您可以轻松使用它来发送文本和二进制数据。 (虽然浏览器支持很窄,特别是后者。)

答案 3 :(得分:1)

WebSocket的好处是它基于HTTP。您也可以在使用http代理的环境中使用它。因此,Websocket与普通tcp具有更高的基础架构兼容性。

此外,http / WebSocket为您提供了一些您必须自己指定的功能:

  • 重定向
  • NAT keepalive
  • 通过URI进行多路复用

答案 4 :(得分:0)

如果要求从服务器推送一些数据,则将其广泛称为COMET或反向Ajax。

Web套接字仍然不是很受欢迎,因为有固有的防火墙问题和来自流行浏览器的最低支持。

您可以查看http://www.ape-project.org/,因为这是最受欢迎的实现之一(但目前仅适用于unix / linux。对于Windows,他们建议使用虚拟机或基于vmware的实现)