如何在客户端使用 HTML5 , CSS 和 JavaScript 编写网站,以便直接tcp / ip连接加载页面后,客户端浏览器之间的连接。
我需要这样做以减少延迟,因为该站点将要求其中一个用户的输入尽快传输给其他用户,以便将数据从客户端A发送到服务器然后再发送到客户端B不是一个好的选择。
我读过有关此主题的先前帖子,但我找不到可用的解决方案/示例。从我读到的内容可以使用Silverlight,Java或Flash等插件进行客户端之间的直接连接。
有没有不需要插件的解决方案?我想只使用JavaScript。
答案 0 :(得分:116)
Stackoverflow上有几个关于浏览器中P2P连接的主题:
正如大多数主题中所提到的,2008年的HTML5工作草案都有一个“点对点连接”部分:
由于W3C Working Draft 12 February 2009“点对点连接”部分消失了。但这种P2P连接并没有消失。它在WebRTC(实时通信)规范中以PeerConnection的名称重新出现:
自2011年10月31日起,W3C编辑的草案是正式的工作草案:
爱立信实验室(2011年5月)在修改过的WebKit中存在PeerConnection(基于UDP)的唯一实现,它运行良好。一些补丁现在在WebKit中(2011年10月 - 请参阅下面的更新!):
此外,WebRTC计划是Google,Mozilla和Opera的一个项目。因此,他们继续关于PeerConnection的规范:
可能Chrome(使用WebKit)将是第一个支持WebRTC和PeerConnection的主要浏览器:
自2012年1月18日起Chrome is supporting WebRTC as well。它可以在Dev channel (Windows, OSX, Linux) and the Canary build (Windows and OSX) enabling it under chrome://flags
中使用。它仅支持视频和音频等MediaStream
,并且可以使用多个Demos进行测试。到目前为止,不支持传输String
/ ArrayBuffer
/ ...等应用程序数据。
由于16th March 2012, the WebRTC Editor's Draft将"Peer-to-peer Data API"分隔为发送和接收通用应用数据(String
,ArrayBuffer
和Blob
)。 Chromium wants to implement the Data API soon(2012年4月10日)。
4月3日,Mozilla也在WebRTC for Firefox发布了第一个工作示例。
DataChannel计划用于Chrome版本25,标志后面,同时可以在Firefox Nightly / Aurora(2012年12月12日)进行测试:
2018:DataChannel仍处于试验阶段,但在当前版本的Chrome和Firefox中可用:
答案 1 :(得分:6)
我不得不让你失望 - 目前只有JavaScript这是不可能的。 Websockets(和Socket.IO)允许客户端和服务器之间的类似套接字的连接,但不允许客户端之间的连接。您的选择是一个插件 - 无论是Flash,Silverlight,Java还是定制的。
您可以使用socket.io并通过编写简单的代理服务器来模拟它。
答案 2 :(得分:3)
我想把注意力转移到这样一个事实,即现在大多数用户都在NAT或防火墙之后,这意味着您无法轻松建立到用户计算机的传入连接。因此,您的想法(如果可能的话)仅在某些情况下有效,并且会给您的解决方案带来额外的复杂性。因此,具有可能持久连接的客户端 - 服务器系统(使用websockets或socket.io)是更好的选择。