/go-peer

an golang p2p connection application

Primary LanguageGoCreative Commons Zero v1.0 UniversalCC0-1.0

go-peer

an golang p2p connection application 因为现在在一家IPCAM公司就职,发现原来大部分公司都是用外面的方案公司提供的P2P库,鉴于研究精神,所以打算自己研究一下P2P 鉴于各种知识产权,前期先使用CC协议开源,后续项目稳定了再考虑Apache或者MIT协议 欢迎更多贡献者一起做这个项目

待办事项

  • 创建项目
  • 实现udp穿透
  • udp穿透流程优化
  • http请求接口 (查询设备是否在线等接口)
  • 实现TCP穿透
  • 多平台测试
  • 结合stun服务优化
  • 服务优化,适配更多的环境,更强的吞吐量
  • 更多的硬件支持

架构

img.png


   ————————————————————————云端————————————————————————
  |                                                     |
  |                                                     |
  |                                                     |
  |                                                     |
服务端(ipcamera,pc等)                                客户端(app,pc客户端等)

云端

云端提供2个功能,1个是桥接代理,就是转发服务端的数据到客户端,目前是做到一个服务里面, 以后可以考虑分离转发服务器,然后转发服务器做集群;再往后可以让客户端直接到RTMP流媒体服务器拉流, 然后等p2p打洞成功后自动切换到p2p并关闭RTMP。 1个是信令转发,通过stun服务获取各自的对外端口,然后通过此信令服务传输并打洞,此服务通过websocket技术实现。

HTTP接口

  • 查询设备在线状态

服务端

服务端默认通过ws到云端进行信令交换,信令交换方式都是可选择的,ws/udp

  • ws方式支持http查询在线状态
  • udp方式不支持http查询在线状态
  • 后续还可以选择mqtt方式进行信令交换

客户端

客户端默认通过ws到云端进行信令交换,可选ws/udp

  • udp方式存在可靠性问题
  • ws不存在可靠性问题,并且ws一旦p2p建立成功后会自动断开