5. Минусы существующих пиринговых сетей
- ну умеют работать с динамикой
- медленные
- установка “мутного” клиентского ПО
- страдают “централизацией”
5
6. О проекте
• опенсоурс проект на JavaScript
• децентрализованная сеть
• без DNS, без центральных серверов
• поверх HTTP
Возможности
• собственные сайты, доменные имена
• загрузка и чтение файлов, json-данных
• блоги, комменты, фотоальбомы,
плейлисты
• чаты в реальном времени
6
8. Карта сети - список всех нод
curl http://5.9.123.140:8080/-/nodes
{
"nid":"5.9.123.140/8080",
"ver"1,
"seg":"D,N,F,P,D0,D1,……"
}
{
"nid":"46.4.76.98/8081",
"ver"1,
"seg":"……F41,F54,P04"
}
8
9. Информация о ноде
curl http://5.9.123.140:8080/-/about
{
"ver":1,
"nid":"5.9.123.140/8080",
"updated":1441639911027,
"segments":{
"D":{"usage":0.2},
"N":{"usage":0.5},
"F":{"usage":0.3},
…
}
}
9
10. Серверная нода
Веб-сервер + БД (NodeJS, SQLite3)
Простой и быстрый KeyValue Storage
Функции:
- пишет данные в распределенную базу (chain)
- проверяет подпись автора
- сообщает о себе другим нодам
- реплицирует данные между нодами
- уведомляет о добавлении данных
10
21. Файлы. Пользователи
// upload file to cloud
baseAPI.uploadFile(fileReader, function(err){
});
// request file from cloud
var fileID = "F2/d8f08dd1564510b0f...e2aaf1e22ec2a1.jpeg";
baseAPI.requestFile(fileID, function(err, content, info){
});
// get user info by public certificate
baseAPI.getUserInfo(certificate, function(err, userInfo){
});
21
23. Добавление данных в канал
var channel = siteInfo.host + "/super-chat/";
var data = {
message: "Bla-bla-bla"
};
// post data to cloud
baseAPI.postData({
uid: channel,
data: data,
ver: 0,
pos: "2016-02-25 19:00:00”
}, function(err, resp) {
console.log(err? "Error" : "OK");
});
23
24. Получение списка данных из канала
var request = {
cmd: "top", // "top|nxt|prv|doc|old"
uid: channel,
sse: true
};
baseAPI.requestData(request, function(err, packs) {
// process data
packs.forEach(function(pack) {
// render messages
console.log(pack.data.message)
});
});
24