【问题标题】:Is it possible to build a torrent client using only HTML(5) and JavaScript?是否可以仅使用 HTML(5) 和 JavaScript 构建一个 torrent 客户端?
【发布时间】:2011-06-14 03:36:19
【问题描述】:

没有什么要补充的了。是否可以仅使用 HTML 和 JavaScript 构建一个 torrent 客户端。您不能使用 Java、ActiveX、NaCl 之类的东西...如果是,请给出高级描述。

我对前端开发了解不多,但我认为 websockets 将能够进行网络连接(是否可以将一个客户端连接到另一个客户端而无需所有数据都通过服务器?)。我知道你不能使用 JavaScript 编写文件,所以我认为正在下载的文件要么必须完全保存在内存中,要么客户端必须使用 HTML5 中的新 API 之一来存储内容。

【问题讨论】:

  • 我想这个问题更倾向于:是否有节点“浏览器”? browserver.org
  • github.com/popcorn-official/popcorn-app:由于 DMCA 删除,存储库不可用。

标签: javascript html websocket bittorrent


【解决方案1】:

没有。不是。

这是因为 WebSocket 规范不属于 HTML5 和 JavaScript ;-) 话虽这么说,但问题是“在 [progressive/upcoming] 浏览器中使用本机支持的功能”然后......

...还是没有 :-)

这是因为 WebSocket 需要一个特殊的握手来设置限制。这不是免费的开放 TCP 盛会。该方法需要

  1. 要修改客户端以接受 WebSocket 请求(以及处理任何跨站点访问问题)

  2. 或者,更现实地说,是一个要通过的服务器

【讨论】:

  • 1.我可以进行此修改还是必须由浏览器的开发人员完成? 2. 所有信息都会通过服务器(如跟踪器索引的每个文件的每一位)还是仅通过握手?谢谢!
  • @quilby 1. 修改需要每个客户端接受 WebSocket 请求(阅读:其他 torrent 客户端——有“cross-域”限制,与 XHR 等一样,仍然会使这种方法无法使用)2)所有信息,可能通过 TLS 从 客户端到服务器(但不是从服务器到其他客户端)加密。此外,WebSocket 并没有建立一种机制来接受传入的请求(尽管在运行服务器的情况下可以做很多有趣的事情)。一些 torrent 客户端会因无法进行反向连接而犹豫不决,甚至拒绝播放。
  • @quilby 一些 torrent 客户端确实支持各种加密方法(在标题或整个流上)。不过,这不应被视为提供任何形式的真正隐私,而只是另一个需要处理的问题。
  • 在最近支持 WebRTC 的浏览器中似乎已经解决了这个问题:github.com/feross/webtorrent
【解决方案2】:

您不能使用 WebSockets,因为它们是严格的客户端-服务器。但即将推出的 WebRTC 标准虽然主要针对音频/视频会议,但有一个用于通用客户端-客户端数据传输的 provision。如果此规定成为最终版本,那么您将有一种可行的方法来实现浏览器之间的通用对等数据传输。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 尽管上面的答案表明不可能构建它,但这些库的存在事件怎么可能?编辑:我猜这是因为它们依赖于 node.js 并且无法在浏览器中运行客户端(本机)...
    • 这是因为这些是网络浏览器种子客户端,它们是节点(服务器端 Javascript)脚本。
    【解决方案4】:

    这可以使用Chrome Apps APIs: chrome.socketchrome.fileSystem.

    Google Chrome 至少有一个纯 JavaScript 实现:JSTorrent

    【讨论】:

      【解决方案5】:

      我迟到了,但由于这个问题仍然在 Google 的搜索结果中名列前茅,所以我还是会回答。

      您可以使用Btapp.js 编写与BitTorrent 相关的网络应用程序或浏览器扩展程序,它使用BitTorrent Torque 提供的Javascript 接口。当您调用 connect 方法时,将提示用户安装 BitTorrent Torque,仅此而已。如果您检查使用它的现有项目,就会发生一些很酷的事情——流媒体、拖放共享等。

      至于没有任何依赖的解决方案,Nick Russler 提到的那些似乎仍然是唯一可行的选择。

      【讨论】:

        【解决方案6】:

        今天没有充分的理由不能这样做。 BitTorrent/uTorrent 都有代码来支持带有二进制帧的 websocket 连接。但是,它们目前是在没有支持的情况下编译的(我认为是由于政治/产品原因)。我曾经在 BitTorrent 工作,另一位工程师 (Arty) 写了支持。有一段时间,能够从移动 Safari 将种子下载到 iPad 上真的很酷。 (有趣的是直接保存到 Google Drive)

        HTTP 跟踪器可以配置为发送 Access-Control-Allow-Origin 标头。

        跟踪器通告协议也可以在“key”字段中使用一个位来指示客户端接受 websocket 连接。然后像“typewant”这样的特殊参数可以表明,announce 响应应该只返回发送该位的客户端。

        也可以类似地扩展跟踪器协议以支持 WebRTC P2P DataChannel 连接的协商,从而可以直接在浏览器浏览器中建立连接。

        目前,我们有 chrome.socket 平台 API 和 jstorrent,一个 chrome 封装的应用程序(主要为 ChromeOS 设计)

        【讨论】:

          【解决方案7】:

          最近有一个基于 WebRTC 的实现,可以在节点和浏览器中运行: https://github.com/feross/webtorrent

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多