前言
编写一个完善的p2p网络并不是一件很容易的事情.需要考虑的因素很多,也需要大量工程才能使其具有可扩展性和可靠性. 从零搭建需要的工程量也是很大,所以我们必须站在巨人的肩膀上. 目前有一个优秀的p2p库用Go编写,名为go-libp2p (它也有nodejs版本和Rust版本, 这里测试主要是使用go版本)
注意: 据我所知,这个go-libp2p库有两个需要注意的:
- 包管理器使用的是gx, gx是一个与语言无关的通用包管理器, 感觉并没有govendor好用.
- 库目前还在处于开发阶段,可能会遇到一些问题,这些问题可能涉及底层代码.
-
第一个问题不是很大.
-
第二个问题, 可以去他们的开源库提交 issue 让他们尽早的知道你碰到问题. 现有的开源p2p库很少,特别是在Go中。总的来说,go-libp2p还是不错的,很适合我们的学习和研究.
环境
系统: 因为我的是mac系统, 所以下面将用mac系统作为搭建环境
工具:
go环境 (我的为 go version go1.11.5 darwin/amd64)
git (我的为 git version 2.17.2 (Apple Git-113))
搭建
最好的方式就是直接将仓库克隆到本地, 然后安装依赖包, 直接在现有的仓库中开发. 您也可以在他们提供的环境之外进行开发,但需要知道如何使用gx.
将libp2p仓库下载
go get -d github.com/libp2p/go-libp2p/
2.安装依赖项
make
libp2p将examples单独放在一个仓库中所以需要单独下载examples的代码库
go get -d github.com/libp2p/go-libp2p-examples/
通过查看go-libp2p-examples/chat/chat.go文件可以知道还需要另外几个模块库
这些库在都在libp2p的仓库中 我将几乎能用的模块库都下载了下来, 不过chat的Demo暂时只能用的引用的那些库.运行
第一个终端中运行
在另外一个终端中运行
发送一条简单的测试命令
在另外一个终端中看到发过来的消息
可能遇到的问题
在测试过程中, 主要碰到一些安装依赖库时总是下载不了依赖库的问题. go的官网库下载超时. 这个问题可以直接到golang的官方git仓库直接将缺少的库下载的到$GOPATH目录. github.com/golang