理论部分
首先,我们要明白p2p要如何实现
举个例子,
看这张图,就比如我有3快机器
1机器开放6001端口
2机器的34394端口链接着6001端口,并且2机器开着6002端口,
3机器的36460端口链接着6002端口,并且3机器开着6003端口
那么现在是如何记录的呢?
先看1机器,当有端口和1机器的端口相连时,node.js是可以获取到链接过来的机器的端口号的,而向1机器链接的这个34394端口,他是随机分配的.
所以我们可以知道:
1机器里存有2机器链接的端口号:
2机器存有1机器接受的端口号和3机器链接的端口号:
3机器存有2机器接受的端口号
那么,我们如何实现传输数据,我们可以从3机器通过存储的2机器接受的端口号发送给2机器,然后为了防止2机器发回来的数据又被接受,我们可以拒绝2机器返回的信息
然后同理,2机器通过接受到3机器发送的数据,遍历2机器自身存储的端口号,把消息传递给1机器,同时拒绝1机器的返回信息
这样我们就可以实现一个简单的p2p通信
话不多说直接代码
代码部分
直接发我的github上的内容,其中test3就是我自己使用的node.js实现p2p网络.
https://github.com/feige011/p2pnetwork
使用例子
开3个窗口先进入其test3.js的目录然后分别依次输入
HTTP_PORT=3001 FFF_PORT=6001 node test3.js
HTTP_PORT=3002 FFF_PORT=6002 node test3.js
HTTP_PORT=3003 FFF_PORT=6003 node test3.js
由于我的设计就是自动链接port小1的端口(为了操作方便),所以第一个输入他会告诉你链接失败,因为你没开6000端口,不用理他.后两个就可以成功链接,
然后在第3窗口打字,就会发现传输到2,1中