«Пиринговый веб на JavaScript», Денис Глазков
-
Upload
mailru-group -
Category
Software
-
view
9.979 -
download
7
Transcript of «Пиринговый веб на JavaScript», Денис Глазков
![Page 1: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/1.jpg)
Пиринговая сеть на JavaScript
Moscow JS
Денис Глазков 2016 г.
1
![Page 2: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/2.jpg)
- устройство сети - серверные ноды - криптография на JS - клиент
2
![Page 3: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/3.jpg)
3
Цензура в Интернете
![Page 4: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/4.jpg)
Пиринговые технологии
4
![Page 5: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/5.jpg)
Минусы существующих пиринговых сетей
- ну умеют работать с динамикой - медленные - установка “мутного” клиентского ПО - страдают “централизацией”
5
![Page 6: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/6.jpg)
О проекте
• опенсоурс проект на JavaScript
• децентрализованная сеть
• без DNS, без центральных серверов
• поверх HTTP
Возможности
• собственные сайты, доменные имена
• загрузка и чтение файлов, json-данных
• блоги, комменты, фотоальбомы, плейлисты
• чаты в реальном времени
6
![Page 7: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/7.jpg)
Устройство сети
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
A B C
7
![Page 8: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/8.jpg)
Карта сети - список всех нод
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
![Page 9: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/9.jpg)
Информация о ноде
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
![Page 10: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/10.jpg)
Серверная нода
Веб-сервер + БД (NodeJS, SQLite3) Простой и быстрый KeyValue Storage
Функции:
- пишет данные в распределенную базу (chain) - проверяет подпись автора - сообщает о себе другим нодам - реплицирует данные между нодами - уведомляет о добавлении данных
10
![Page 11: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/11.jpg)
• https://github.com/basenetwork/base.server-node/
Git Серверная нода
11
![Page 12: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/12.jpg)
• sign(data, privateKey) • verify(data, sign, publicKey)
• encode(data, publicKey) • decode(data, privateKey)
Криптография на JavaScript
- Эллиптические кривые secp256k1
- Длина ключа 256 бит (32 байта)
- Минимальные функции:
12
![Page 13: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/13.jpg)
Криптография на 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
13
![Page 14: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/14.jpg)
Клиент
14
![Page 15: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/15.jpg)
15
![Page 16: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/16.jpg)
Под капотом
16
![Page 17: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/17.jpg)
17
![Page 18: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/18.jpg)
18
![Page 19: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/19.jpg)
19
![Page 20: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/20.jpg)
Разработка клиентского приложения
//============ MySiteEngine.js =================var baseAPI = basenetwork.getAPI(0);
// request current site informationvar siteInfo = baseAPI.getCurrentSiteInfo();
// -> {host,owner,title,ring…}
20
![Page 21: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/21.jpg)
Файлы. Пользователи
// upload file to cloudbaseAPI.uploadFile(fileReader, function(err){});// request file from cloudvar fileID = "F2/d8f08dd1564510b0f...e2aaf1e22ec2a1.jpeg"; baseAPI.requestFile(fileID, function(err, content, info){});// get user info by public certificatebaseAPI.getUserInfo(certificate, function(err, userInfo){});
21
![Page 22: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/22.jpg)
22
![Page 23: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/23.jpg)
Добавление данных в канал
var channel = siteInfo.host + "/super-chat/"; var data = { message: "Bla-bla-bla"}; // post data to cloudbaseAPI.postData({
uid: channel, data: data, ver: 0, pos: "2016-02-25 19:00:00” }, function(err, resp) { console.log(err? "Error" : "OK");});
23
![Page 24: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/24.jpg)
Получение списка данных из канала
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
![Page 25: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/25.jpg)
• https://github.com/basenetwork/client-js/
Git Клиентское ядро
25
![Page 26: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/26.jpg)
• https://github.com/basenetwork/site-engiene-js/
Git Сайтовый движок
26
![Page 27: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/27.jpg)
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> ); }
});
27
![Page 28: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/28.jpg)
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> ); } });
28
![Page 29: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/29.jpg)
React.JS Chat
//====== Register Chat Component ========== $component('chat', Page, { tplChildForm: MessageNew,
tplChildItem: Message
});
29
![Page 30: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/30.jpg)
• http://base.network/
• https://github.com/basenetwork
Ссылки
30
![Page 31: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/31.jpg)
Перспективы развития
WebRTC
Client
IndexedDB
Client
IndexedDB
Proxy server
- Нативная криптография через window.crypto - WebRTC, IndexedDB - Расширение функционала - Приватные чаты
31
![Page 32: «Пиринговый веб на JavaScript», Денис Глазков](https://reader034.fdocument.pub/reader034/viewer/2022042723/58f1443d1a28abf1108b45ad/html5/thumbnails/32.jpg)
base.network Пиринговая сеть на JavaScript
Денис Глазков 2016
Вопросы?
32