SlideShare a Scribd company logo
Пиринговый веб
на JavaScript
Денис Глазков
1
- обзор пиринговых сетей
- устройство сети base.network
- серверные ноды
- криптография на JS
- устройство клиента
- разработка клиентских приложений
Содержание
2
Закрыли любимую группу в соц. сетях?
3
Великий Китайский Фаервол
4
5
6
7
Цензура в Интернете
8
Пиринговые технологии
ethereum
9
Одноранговые сети
10
Мир во всех Мирах!
11
Прекрасное жестоко, не будь ко мне далёко
12
13
Социальная сеть Земля-Марс ?
14
15
I2P
Freenet
16
17
Минусы существующих пиринговых сетей
- не умеют работать с динамикой
- медленные
- установка “мутного” клиентского ПО
- страдают “централизацией”
18
base.network
О проекте
• опенсоурс проект на JavaScript
• децентрализованная сеть
• без DNS, без центральных серверов
• поверх HTTP
19
base.network
Возможности
• собственные сайты, доменные имена
• загрузка и чтение файлов, json-данных
• блоги, комменты, фотоальбомы, плейлисты
• чаты в реальном времени
20
Устройство сети
NodeJS
IP:port
NodeJS
IP:port
NodeJS
IP:port
NodeJS
IP:port
NodeJS
IP:port
NodeJS
IP:port
client
JavaScript
client
JavaScript
client
JavaScript
client
JavaScript
client
JavaScript
NodeJS
IP:port
data: A B C
21
Серверная нода
Веб-сервер + БД (NodeJS, SQLite3)
Простой и быстрый KeyValue Storage
Функции:
- сообщает о себе другим нодам
- пишет данные в распределенную базу
- проверяет валидность данных (подпись автора)
- реплицирует данные между нодами
- уведомляет о добавлении данных
22
Карта сети - список всех нод
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"
}
23
Информация о ноде
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},
…
}
}
24
https://github.com/basenetwork/base.server-node/
Git
Серверная нода
NodeJS
25
• sign(data, privateKey)
• verify(data, sign, publicKey)
• encrypt(data, publicKey)
• decrypt(data, privateKey)
Криптография на JavaScript
- Эллиптические кривые secp256k1
- Длина ключа 256 бит (32 байта)
- Минимальный набор функций:
26
Криптография на JavaScript
библиотеки
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) Tom Wu
http://www-cs-students.stanford.edu/~tjw/jsbn/
jsrsasign 4.8.3 (c) 2010-2015 Kenji Urushima
kjur.github.com/jsrsasign/license
27
Клиент
28
29
30
Под капотом
31
32
33
34
Разработка клиентского
приложения
//============ MySiteEngine.js =================
var baseAPI = basenetwork.getAPI(0);
// request current site information
var siteInfo = baseAPI.getCurrentSiteInfo();
// -> {host,owner,title,ring…}
35
Файлы. Пользователи
// 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){
});
36
37
Добавление данных в канал
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) {
// process results
console.log(err? "Error" : "OK");
});
38
Получение списка данных из канала
var request = {
cmd: "top", // "top|nxt|prv|doc|old"
uid: channel, // address of channel
sse: true // listen server side events
};
baseAPI.requestData(request, function(err, packs) {
// process data
packs.forEach(function(pack) {
// render messages
console.log(pack.data.message)
});
});
39
https://github.com/basenetwork/client-js/
Git
Клиентское ядро
40
https://github.com/basenetwork/site-engiene-js/
Git
Сайтовый движок
41
React.JS Chat
// Components/Chat.jsx
//======= New Message Form =============
var MessageNew = $class(Form, {
render: function() {
return (
<form onSubmit={this.submit} className="chat-message-new">
{this.$input("message", {placeholder: "New message”})}
<button type="submit">Add message</button>
</form>
);
}
});
42
React.JS Chat
//============ Components/Chat.jsx Message =================
var Message = $component("chat-message", {
render: function() {
return(
<div className="chat-message">
<UserIcon user={this.props.element.author} />
<UserName user={this.props.element.author} />
<p>{this.props.element.get("message")}</p>
</div>
);
}
});
43
React.JS Chat
//====== Register Chat Component ==========
$component('chat', Page, {
tplChildForm: MessageNew,
tplChildItem: Message
});
44
45
• http://base.network/
• https://github.com/basenetwork
Ссылки
46
Перспективы развития
WebRTC
Client
IndexedDB
Client
IndexedDB
Proxy server
- Нативная криптография через window.crypto
- WebRTC, IndexedDB
- Расширение функционала сайтового движка
- Приватные чаты
47
base.network
Пиринговый веб на JavaScript
Денис Глазков
2016
Вопросы?
48

More Related Content

PDF
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
PDF
МРТ для данных, Frontend Conf 2016
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
PDF
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
PDF
Конструктор / Денис Паясь (Яндекс)
PPTX
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
PDF
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
PDF
Изоморфный JavaScript — будущее уже здесь
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
МРТ для данных, Frontend Conf 2016
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
Конструктор / Денис Паясь (Яндекс)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
Изоморфный JavaScript — будущее уже здесь

What's hot (20)

PDF
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
PPTX
Webpack integration
PDF
Как Webpack сделал меня счастливее
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PDF
Knockoutjs на примере 2ГИС-Онлайн
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
PDF
Современный фронтенд -- как не утонуть в море хайпа?
PPTX
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
PDF
Vue.js - реактивный фронтенд фреймворк для людей
PDF
Внутреннее устройство и оптимизация бандла webpack
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Рендеринг может больше: vue.js vs React, Андрей Солодовников
PDF
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
PDF
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
PDF
Суперсилы Chrome developer tools
PDF
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
PPTX
PDF
Инструменты разные нужны, инструменты разные важны
PDF
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
Webpack integration
Как Webpack сделал меня счастливее
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Knockoutjs на примере 2ГИС-Онлайн
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
Современный фронтенд -- как не утонуть в море хайпа?
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Vue.js - реактивный фронтенд фреймворк для людей
Внутреннее устройство и оптимизация бандла webpack
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Рендеринг может больше: vue.js vs React, Андрей Солодовников
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Суперсилы Chrome developer tools
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
Инструменты разные нужны, инструменты разные важны
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Ad

Viewers also liked (20)

PDF
Малоизвестные грабли A/B-тестирования и роль контрольных экспериментов / Рома...
PDF
Creating Applications with WebGL and Three.js
PPT
Подробная презентация JavaScript 6 в 1
PDF
Обзор ES2015(ES6)
PDF
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
PDF
AddConf. Дмитрий Сошников - Будущее ECMAScript
PPT
доклад
PPTX
Построение моделей на примере продаж рекламы / Алексей Праслов
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PPTX
JavaScript-модули "из прошлого в будущее"
PDF
Ecma script 6 in action
PDF
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
PPTX
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
PDF
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
PDF
Дэвид Флэнаган — Javascript (5 издание)
PDF
"Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12
PDF
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
PDF
Prometheus мониторинг микросервисных приложений / Виталий Левченко
PDF
UX-дизайнер, ты ли это. Навыки проектировщика в стилизации интерфейсов / Илья...
PDF
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Малоизвестные грабли A/B-тестирования и роль контрольных экспериментов / Рома...
Creating Applications with WebGL and Three.js
Подробная презентация JavaScript 6 в 1
Обзор ES2015(ES6)
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
AddConf. Дмитрий Сошников - Будущее ECMAScript
доклад
Построение моделей на примере продаж рекламы / Алексей Праслов
DevConf. Дмитрий Сошников - ECMAScript 6
JavaScript-модули "из прошлого в будущее"
Ecma script 6 in action
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
Дэвид Флэнаган — Javascript (5 издание)
"Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Prometheus мониторинг микросервисных приложений / Виталий Левченко
UX-дизайнер, ты ли это. Навыки проектировщика в стилизации интерфейсов / Илья...
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Ad

Similar to base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus) (20)

PDF
"Пиринговый веб на JavaScript"
PDF
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
PDF
«Пиринговый веб на JavaScript», Денис Глазков
PDF
Телепортация MODX - MODX Meetup Minsk
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PPT
Анализ работы антивирусных лабораторий
PPTX
Dapper + QueryObject
PDF
Как превратить приложение в платформу
PDF
The art of Node.js or how to do something cool using public data by Ilya Zapr...
PDF
17 способов опозорить ваш МСЭ и проникнуть в корпоративную сеть
PDF
Сеть и приложения Возможности на границе миров
PDF
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
PPTX
Open source technologies in Microsoft cloud - MS SWIT 2014
PPTX
Эволюция BackDoor.Flashback
PDF
Денис Паясь
PDF
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
PDF
Алексей Захаров "Архитектура Яндекс.Фоток"
PPTX
Новые возможности развертывания и масштабирования open source приложений в Az...
PPT
Node.JS: возможности для РНР-разработчика
PDF
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
"Пиринговый веб на JavaScript"
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков
Телепортация MODX - MODX Meetup Minsk
Леонид Васильев "Python в инфраструктуре поиска"
Анализ работы антивирусных лабораторий
Dapper + QueryObject
Как превратить приложение в платформу
The art of Node.js or how to do something cool using public data by Ilya Zapr...
17 способов опозорить ваш МСЭ и проникнуть в корпоративную сеть
Сеть и приложения Возможности на границе миров
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Open source technologies in Microsoft cloud - MS SWIT 2014
Эволюция BackDoor.Flashback
Денис Паясь
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
Алексей Захаров "Архитектура Яндекс.Фоток"
Новые возможности развертывания и масштабирования open source приложений в Az...
Node.JS: возможности для РНР-разработчика
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)