服务器如何同时访问内外网(服务器内网怎么连接)
InterPlanetary File System这个名字出自利克莱德(J.C.R. Licklider)的星际(intergalactic)互联网。IPFS 的发明者胡安·贝尼特(Juan Benet)是一位墨西哥移民,毕业于斯坦福大学的计算机科学专业。他之前创立的一家公司在 2013 年被雅虎收购 ,随后他在今年的 Y Combinator 项目中成立了 Protocol Labs,这家公司现在的工作是推进 IPFS 项目,它的目标是取代我们在过去 20 年已经习以为常的互联网协议。
IPFS 是一个点对点的分布式文件系统,它希望将所有的计算设备都连接到同一个文件系统中。它可以从许多方面改善 HTTP,胡安最近指出了其中两个关键:
“我们使用的是内容寻址的技术,也就是说内容可以从源服务器分离出来,并永久储存。这就意味着内容可以在距离用户非常近的地方储存和托管,甚至是储存在同一个房间里面。内容寻址还可以让我们校验数据,因为其他主机可能是不受信任的。一旦内容被下载到用户的设备之后,它就可以被无限期的保存。”
IPFS 还可以解决困扰 HTTP 互联网多时的安全问题:内容寻址和内容签名技术可以保护基于 IPFS 的网站,并杜绝 DDoS 攻击发生的可能。IPFS 还可以归档重要的公共记录内容,避免网站终止运营所带来的损失。
IPFS 的最后一个核心改进是去中心化的内容分布,这点可以让人们在分散的互联网服务(甚至是离线的情况)之下获取互联网内容:“我们让网站和网页应用摆脱了源服务器的牵制,”胡安解释道,“它们可以按照比特币网络的模式进行分布。”这是 HTTP 无法做到的一点,而且对于网络条件欠佳的地方(也就是发展中地区)和市郊地区来说是一个极大的好处。
下面简单介绍IPFS的使用:
IPFS的安装,请参考官网https://ipfs.io/docs/install/
命令行中运行:
初始: Ipfs init
加入ipfs网络: ipfs daemon
查看ipfs的readme: ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
发布内容: ipfs add info.txt
缓存内容到本地: ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8
更多命令行api参阅 https://ipfs.io/docs/api/
这里额外介绍下在node中使用ipfs的情况(在开发中可能用到的更多).
先安装: npm install --save ipfs-api
代码中使用如下:
var ipfs = require('ipfs-api')(“/ip4/127.0.0.1/tcp/5001”);
// save txt to ipfs
function saveTxt(content, callback){
var buffered = Buffer.from(content);
ipfs.files.add(buffered, function(err, _files) {
if (err) {
console.log("fail:", err);
return;
}
console.log("success:", _files[0].hash);
callback(_files[0].hash);
});
}
// get content from hashKey
function getTxt(hashKey, callback){
ipfs.files.get(hashKey, function(err, stream) {
if (err) {
console.log("fail:", err);
}
// we get a node stream object, and we get content from pipe.
stream.on('data', (file) => {
file.content.pipe(concat((content) => {
console.log("success:", file.path, content.toString());
callback(content.toString());
}));
})
})
}
通过上面2个方法可以实现在nodejs中调用ipfs对文本内容存储和读取.
注意的是require('ipfs-api')(“/ip4/127.0.0.1/tcp/5001”)这句表明得现在本机安装ipfs,如果我们不想在本机安装,而是用远程的某个节点,则可以指定远程节点ip,
如:require('ipfs-api')(“/ip4/192.168.10.49/tcp/5001”).
但这需要在10.49这个远程节点先修改api访问ip地址,在(10.49的)命令行中输入:
ipfs config Addresses.API /ip4/192.168.10.49/tcp/5001
通过设置指定ip的形式,就可以让10.49作为一个远程节点来提供服务.
详见:
https://github.com/ipfs/js-ipfs-api
https://nodejs.org/api/stream.html
IPFS在Nodejs中提供的API可以方便地与web3进行结合使用.使我们方便地将较大的数据内容存储到IPFS中并访问.
由于篇幅有限,无法深入介绍,具体请参考以上官方文档.