首页   注册   登录
 edwardwo 最近的时间轴更新

edwardwo

V2EX 第 229148 号会员,加入于 2017-05-05 10:46:50 +08:00
edwardwo 最近回复了
@qdwang 很遗憾, 不支持 iOS, 目前这个 P2P 功能只支持桌面 Chrome. webRTC 虽然是 w3c 标准, Firefox, Safari 11(桌面, iOS)都支持了. 但我的 app 主要是以文件传输为主, 为了能传输超大文件, 底层用到了 Filesystem API, 这个不是 w3c 标准, 是 Google 自己倒腾出来的. 而 iOS 平台上的 Chrome 浏览器, 底层的 rendering 和 javascript 引擎用的是 Apple 的引擎(Apple 就是这么规定的: 在我的平台上必须用我的技术.). 因此, 也不支持这个 API.

如果我不用 filesystem API 的话, 理论上到是可以支持全平台(桌面 /iOS/android), 但这样只能传输小文件, 而且底层有许多兼容性问题, 开发工作量也非常巨大.
webRTC 除了可以发文件(底层用了 data channel), 还有个很帅的功能(视频聊天), 这个目前几乎是全平台都支持了. 我在想要不要把这个功能加在我的这个网站上呢.
@886106 当然可以, 我就是部署在青云的服务器上. 上传文件的个数和大小, 取决于 2 个参数值: maxUpload(单个页面最多允许上传多少文件), maxFileSize(单个文件允许多大, 如: 20m, 5M), 我的小网站, 带宽 /磁盘有限, 因而只允许最大上传 5M 的文件.
github 上我增加了一个中文的 readme.md:
https://github.com/edwardwohaijun/file-transfer/blob/master/README_cn.md
页面上有详细说明.
@Tink FilePizza 底层也是用 webRTC 实现 P2P 传输的, 数据不经过服务端, 因此它需要发送方的页面一直打开, 直到接受方收完为止. 由于 FilePizza 还支持 Firefox, 因此我觉得传输的文件不能大于接受方内存允许的大小. 而我的 app 仅支持 Chrome(有个 FileSystem API, 可以把数据直接写入硬盘), 因此可以传输超大文件.

@qdwang 这个应用本身就是一个服务, 只需占据一个端口即可. 安装部署步骤如下:
首先要安装如下软件:
Golang (>= 1.9.2), 需要设置 $GOPATH 环境变量
MongoDB (>= 3.2)
NodeJS (>=6.5) 客户端 JS 文件打包之用

下载安装:
go get github.com/edwardwohaijun/file-transfer/cmd/filetransferd
cd $GOPATH/src/github.com/edwardwohaijun/file-transfer/
go build -o filetransferd cmd/filetransferd/main.go

cd web
npm install
npm run build (适用于开发, 测试环境)
npm run ship (适用于生产环境)
cd ..
./filetransferd 直接运行编译后的可执行文件即可, 虽然有 10 几个参数, 但都有默认值.
打开 Chrome 访问: http://127.0.0.1/9090

后端的代码几乎都是针对"上传文件"这个功能, 如果你仅仅想实现 P2P 传输, 可以使用我的另外一个 JavaScript library: simple filer ( https://github.com/edwardwohaijun/simple-filer ), 直接 import 到你的项目中即可.
@marcong95 这 4 个三角形, 点击后往外拖拉后就可以生成一条折线(尾端有个箭头). 其实当你点击的一刻, 即: 还没有往外拖拉时, 我就已经生成了一条直线. 只不过该线的起始和结束都是一个点. 照理说, 如果鼠标不拖拉, 点击后直接松开, 我应该立刻删除这条长度为 0 的线. 这个操作我一时偷懒, 还没做. 就形成了你说的情况: 出现了一个长度为 0 的线, 且尾端有个箭头. 我稍后会修复这个 bug. 谢谢提醒.
果然是渣代码, 走开一会会就死机了, 好尴尬. 现在正常了.
2017-08-17 14:53:03 +08:00
回复了 edwardwo 创建的主题 分享创造 个人业余时间做的 P2P 文件传输 library
@kmahyyg 聊天的 web app, 暂时不准备开源, bug 太多. 这个聊天 app 其实没啥技术含量, 都是现成的技术, 拿来整合在一起罢了.
@m2276699 穿越防火墙 /NAT 的原理很简单, 没啥折腾的空间, 诞生不了黑科技.
2017-08-17 12:20:06 +08:00
回复了 edwardwo 创建的主题 分享创造 个人业余时间做的 P2P 文件传输 library
@m2276699 P2P 连接, 其底层是通过 WebRTC 实现的, 而 WebRTC 又需要借助 stun server 才能穿越防火墙 /NAT. 对于某些 NAT, 如 symmetric NAT 是肯定无法穿越的, NAT3 能否穿越, 我也不清楚. 一般在商业领域, 遇到无法穿越防火墙的情况, 会再提供一台 TURN server 用来做数据中转, 因此 new Filer 的 constructor 还有个第三 optional 参数, webrtcConfig
这个参数就可以用来指定 TURN server, 如:

configObject = {iceServers: [{url: 'stun:stun.l.google.com:19302'}, {url: 'turn:SERVERIP:PORT', credential: 'secret', username: 'username'}, ...]}
var filer = new Filer({myID: 123, signalingChannel: ws, webrtcConfig: configObject})
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1974 人在线   最高记录 3821   ·  
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 11ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
♥ Do have faith in what you're doing.
沪ICP备16043287号-1