我读过关于WebSockets,但它们似乎不是纯粹的"套接字",因为在它们上面有一个应用层协议。" ws: "
是否有任何方法从web浏览器做一个纯套接字连接,以激活网页?
这是我在黑暗中随机的刺伤
- Java提供的applet sockets(需要安装Java)
- Flash提供的Flash socket(需要安装Flash)
但是关于HTML5,为什么他们被称为WebSockets,如果他们不是Sockets?
是websocket协议如此简单的实现,它是"几乎"套接字?
我读过关于WebSockets的文章,但它们似乎不是纯粹的"socket",因为在它们上面有一个应用层协议。
[是]websocket协议如此简单的实现,[它]"几乎"socket ?
允许从浏览器直接进行常规的套接字连接是永远不会发生的,因为它会带来巨大的风险。WebSockets是最接近原始套接字的浏览器,因为你会得到。初始的WebSockets握手类似于HTTP握手(允许web服务器代理/桥接),并增加了CORS类型的安全性。此外,WebSockets是基于消息的传输(而不是原始TCP流),这是在每个消息帧上使用两个字节的报头完成的。
甚至flash也不能完全建立原始的TCP连接。Flash套接字也添加了CORS安全性,但是Flash套接字连接不是带内握手,而是连接到目标服务器上的端口843以请求安全策略文件。
是否有任何方法从web浏览器做一个纯套接字连接,以激活网页?
是的,你可以使用我的websockify桥接/代理,它允许启用websockify的浏览器通过websockify直接连接到TCP套接字。
WebSockets是建立在TCP套接字上的传输。握手之后的开销非常小(通常只有两个字节的报头)。但是关于HTML5,为什么他们被称为WebSockets,如果他们不是Sockets?
我无法改进Kanaka对你次要问题的回答,而且我知道这个问题已经有一年了。但是对于主要问题,Is there any way of doing a pure socket connection from a web browser, to enliven webpages?
有一个叫做Java/JavaScript Socket Bridge的项目,可能是你(或任何从谷歌搜索中遇到这个页面的人)正在寻找的。与其他方法相比,此方法的优点是它既不需要运行客户端服务,也不需要运行服务器端服务。因此,例如,如果你想用JavaScript实现一个IRC客户端,但是你的web主机不允许你有足够的权限来代理连接,这个Java applet将是你的选择。唯一关心的是确保客户端安装了Java并允许。
你可以用WebSockets在客户端和服务器之间发送数据。简单地说,WebSockets引入的唯一区别是客户端:
- 添加一些报头字节,如数据类型和长度
- 添加掩码并使用它们编码数据
服务器还必须添加报头字节,但不需要对数据进行编码。
如果您正确地实现了协议(服务器端,也就是说,因为浏览器已经有了实现),您可以轻松地使用它来发送文本和二进制数据。(虽然浏览器支持的范围很窄,尤其是后者)
WebSocket的好处是它是基于HTTP的。您也可以在使用http代理的环境中使用它。因此,Websocket具有比普通tcp更高的基础设施兼容性。
另外,http/WebSocket为你提供了一些你必须自己指定的功能:
- NAT keepalive
- URI复用
- 框架
如果您要求从服务器推送一些数据,则通常称为COMET或反向Ajax。
Web套接字仍然不是很流行,因为存在固有的防火墙问题和来自流行浏览器的最小支持。
您可以查看http://www.ape-project.org/,因为这是最流行的实现之一(但目前仅本机用于unix/linux)。对于windows,他们建议使用虚拟盒子或基于vmware的实现)