
Децентрализованные ленты на основе DHT BitTorrent. Идея от Arvid и The_8472 «DHT RSS feeds» http://libtorrent.org/dht_rss.html
Децентрализованные ленты с использованием DHT BitTorrent. Идея от Arvid и The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
DHT BitTorrent, вероятно, одна из самых устойчивых и цензуроустойчивых сетей в интернете. PeerTweet использует эту сеть, чтобы позволить пользователям транслировать твиты всем, кто слушает. Когда вы запускаете PeerTweet, он генерирует хэш @33cwte8iwWn7uhtj9MKCs4q5Ax7B, который похож на ваше имя пользователя в Twitter (например, @lmatteis). Разница в том, что вы полностью контролируете, что может быть опубликовано, потому что только вы владеете закрытым ключом, связанным с таким адресом. Кроме того, благодаря DHT, то, что вы публикуете, не может быть остановлено никаким правительством или учреждением.
Как только вы найдете другие адреса PeerTweet, которым доверяете (и которые не являются спамом), вы можете подписаться на них. Это настраивает ваш клиент на хранение твитов этого пользователя и периодическую их трансляцию в DHT для поддержания их ленты. Такое сотрудничество при подписке на аккаунты позволяет лентам оставаться активными в сети DHT. Протокол PeerTweet также публикует ваши действия, такие как I just followed @919c.. или I just liked @9139.. и I just retweeted @5789... Это дает возможность новым пользователям находить другие адреса, которым они могут доверять; если я доверяю пользователю @6749.., а он подписан на @9801.., то, возможно, я могу пометить @9801.. как не спам. Эта идея публичного твитинга о ваших действиях также позволяет проводить мощный будущий анализ социального графа с помощью краулинга.
PeerTweet следует большинству рекомендаций по реализации, предоставленных в предложении DHT RSS feed http://libtorrent.org/dht_rss.html. Мы реализовали его поверх текущего предложения BEP44, которое предоставляет функциональность get() и put() через сеть DHT. Это означает, что вместо использования DHT только для объявления о том, какие торренты в данный момент загружаются, мы можем также размещать и получать небольшие объемы данных (примерно 1000 байт).
PeerTweet различает два типа элементов:
@lmattes). Заголовок ленты имеет примерно следующую структуру:{
"d": <unsigned int of minutes passed from epoch until head was modified>,
"next": <up to 80 bytes of the next 4 items in the feed, directly 1,2,3 and 4 hops away. 20 bytes each.>,
"n": <utf8 name of the feed>,
"a": <utf8 http url of an image to render as your avatar>,
"i": <utf8 description of your feed>
}
{
"d": <unsigned int of minutes passed from epoch until when item was created>,
"next": <up to 80 bytes of the next 4 items in the feed, 1, 2, 4 and 8 hops away. 20 bytes each.>,
"t": <utf8 contents of your tweet. up to 140 chars>
}
Причина, по которой элементы имеют несколько указателей на другие элементы в списке, заключается в возможности параллельного поиска. Наша реализация списка с пропусками отличается от обычных реализаций и ориентирована на сетевые запросы: каждый элемент содержит 4 указателя, так что при получении элемента мы можем отправить 4 параллельных запроса get() к другим элементам списка. Это критически важно для своевременного доступа к лентам пользователей, поскольку время отклика DHT-запросов непредсказуемо.
Когда вы на кого-то подписываетесь, вы по сути указываете своему клиенту загружать их ленту и периодически перепубликовывать её. Сеть DHT не является постоянной, и элементы быстро исчезают из сети примерно через 30 минут. Чтобы поддерживать их активность, наличие многих подписчиков критически важно для времени безотказной работы вашей ленты. В противном случае вы всё ещё можете иметь сервер, работающий 24/7, который поддерживает вашу ленту активной, перепубликовывая элементы каждые 30 минут.
Установите зависимости.
$ npm install
Приложение поставляется с некоторыми нативными привязками. Я использовал этот код, чтобы оно работало на моем компьютере:
Источник: https://github.com/atom/electron/blob/master/docs/tutorial/using-native-node-modules.md
npm install --save-dev electron-rebuild
# Every time you run "npm install", run this
./node_modules/.bin/electron-rebuild
# On Windows if you have trouble, try:
.\node_modules\.bin\electron-rebuild.cmd
Чтобы заставить ed25519-supercop работать в Windows, мне также пришлось установить node-gyp и всё, что требуется для node-gyp: Python2.7 и Visual Studio: https://github.com/nodejs/node-gyp
Затем выполните эти команды для сборки в Windows:
npm install -g node-gyp
cd ./node_modules/ed25519-supercop/
HOME=~/.electron-gyp node-gyp rebuild --target=0.36.9 --arch=x64 --dist-url=https://atom.io/download/atom-shell
Запустите эти две команды одновременно в разных вкладках консоли.
$ npm run hot-server
$ npm run start-hot
Примечание: требуется версия node >= 4 и версия npm >= 2.
Смотрите electron-debug для получения дополнительной информации.
Смотрите redux-devtools-dock-monitor для получения дополнительной информации.
Если вы используете сторонние библиотеки, которые не могут быть собраны с помощью webpack, вы должны перечислить их в вашем webpack.config.base.js:
externals: [
// put your node 3rd party libraries which can't be built with webpack here (mysql, mongodb, and so on..)
]
Вы можете найти эти строки в файле.
Импортируйте css-файл как css-modules, используя .module.css.
$ npm run package
Чтобы собрать приложения для всех платформ:
$ npm run package-all
Используйте electron-packager для упаковки вашего приложения с опцией --all для платформ darwin (osx), linux и win32 (windows). После сборки вы найдете их в папке release. В противном случае вы найдете только одну для вашей ОС.
test, tools, release folder and devDependencies in package.json will be ignored by default.
Мы добавляем peerDependencies некоторых модулей в опцию игнорирования по умолчанию для уменьшения размера приложения.
babel-core требуется babel-loader, и его размер ~19 МБnode-libs-browser требуется webpack, и его размер ~3 МБПримечание: Если вы хотите использовать любой из вышеперечисленных модулей во время выполнения, например:
require('babel/register'), вы должны переместить их изdevDependenciesвdependencies.
Пожалуйста, ознакомьтесь с Сборкой приложений для Windows с платформ, отличных от Windows.
Если вы хотите иметь интерфейс, похожий на нативный (OS X El Capitan и Windows 10), react-desktop может идеально вам подойти.
Это форк проекта https://github.com/chentsulin/electron-react-boilerplate.
MIT