
BitTorrent의 DHT를 사용하는 탈중앙화 피드. Arvid와 The_8472의 "DHT RSS 피드"에서 아이디어를 얻음 http://libtorrent.org/dht_rss.html
BitTorrent의 DHT를 사용하는 분산형 피드. Arvid와 The_8472의 "DHT RSS 피드" 아이디어를 기반으로 합니다. http://libtorrent.org/dht_rss.html
BitTorrent의 DHT는 아마도 인터넷에서 가장 탄력적이고 검열에 강한 네트워크 중 하나일 것입니다. PeerTweet은 이 네트워크를 사용하여 사용자가 청취 중인 모든 사람에게 트윗을 브로드캐스트할 수 있도록 합니다. PeerTweet을 시작하면 Twitter 사용자 이름(예: @lmatteis)과 유사한 해시 @33cwte8iwWn7uhtj9MKCs4q5Ax7B가 생성됩니다. 차이점은 해당 주소와 연결된 개인 키를 소유한 사람만 게시할 수 있는 내용을 완전히 제어할 수 있다는 것입니다. 또한 DHT 덕분에 게시한 내용은 어떤 정부나 기관도 막을 수 없습니다.
신뢰할 수 있는 (스팸이 아닌) 다른 PeerTweet 주소를 찾으면 팔로우할 수 있습니다. 그러면 클라이언트가 해당 사용자의 트윗을 저장하고 DHT에 주기적으로 다시 브로드캐스트하여 피드를 계속 유지하게 됩니다. 이러한 계정 팔로우 협력을 통해 DHT 네트워크에서 피드가 살아 있을 수 있습니다. PeerTweet 프로토콜은 또한 I just followed @919c.. 또는 I just liked @9139.., I just retweeted @5789..와 같은 사용자의 행동을 게시합니다. 이를 통해 새 사용자가 신뢰할 수 있는 다른 주소를 찾을 수 있습니다. 사용자 @6749..를 신뢰하고 해당 사용자가 @9801..을 팔로우한다면, @9801..을 스팸이 아닌 것으로 표시할 수 있습니다. 이렇게 공개적으로 행동에 대해 트윗하는 아이디어는 향후 소셜 그래프에 대한 강력한 크롤링 분석을 가능하게 합니다.
PeerTweet은 DHT RSS 피드 제안(http://libtorrent.org/dht_rss.html)에서 제공하는 대부분의 구현 지침을 따릅니다. 현재 DHT 네트워크에서 get() 및 put() 기능을 제공하는 BEP44 제안 위에 구현했습니다. 즉, DHT를 현재 다운로드 중인 토렌트를 알리는 데만 사용하는 대신 작은 양의 데이터(약 1000바이트)를 put 및 get하는 데도 사용할 수 있습니다.
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분 후에 네트워크에서 빠르게 사라집니다. 피드를 계속 살아 있게 하려면 많은 팔로워가 중요합니다. 그렇지 않으면 피드를 30분마다 다시 게시하여 24시간 내내 실행되는 서버를 보유할 수도 있습니다.
의존성을 설치합니다.
$ npm install
앱에는 일부 네이티브 바인딩이 포함되어 있습니다. 제 컴퓨터에서 실행하기 위해 다음 코드를 사용했습니다.
출처: https://github.com/atom/electron/blob/master/docs/tutorial/using-native-node-modules.md
npm install --save-dev electron-rebuild
# "npm install"을 실행할 때마다 다음을 실행하세요.
./node_modules/.bin/electron-rebuild
# Windows에서 문제가 있는 경우 시도해보세요.
.\node_modules\.bin\electron-rebuild.cmd
Windows에서 ed25519-supercop를 작동시키려면 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: [
// webpack으로 빌드할 수 없는 node 타사 라이브러리를 여기에 넣으세요 (mysql, mongodb 등)
]
해당 줄은 파일에서 찾을 수 있습니다.
.module.css를 사용하여 css-modules로 css 파일을 가져옵니다.
$ npm run package
모든 플랫폼용 앱 패키징:
$ npm run package-all
electron-packager를 --all 옵션과 함께 사용하여 darwin (osx), linux, win32 (windows) 플랫폼용 앱을 패키징합니다. 빌드 후 release 폴더에서 찾을 수 있습니다. 그렇지 않으면 현재 OS용만 찾을 수 있습니다.
test, tools, release 폴더와 package.json의 devDependencies는 기본적으로 무시됩니다.
애플리케이션 크기 축소를 위해 일부 모듈의 peerDependencies를 기본적으로 무시 옵션에 추가했습니다.
babel-core는 babel-loader에 필요하며 크기는 ~19 MB입니다.node-libs-browser는 webpack에 필요하며 크기는 ~3MB입니다.참고: 런타임에 위 모듈을 사용하려면(예:
require('babel/register'))devDependencies에서dependencies로 이동해야 합니다.
비 Windows 플랫폼에서 Windows 앱 빌드를 확인하세요.
네이티브 스타일 사용자 인터페이스(OS X El Capitan 및 Windows 10)를 원한다면 react-desktop이 완벽하게 적합할 수 있습니다.
이 프로젝트는 https://github.com/chentsulin/electron-react-boilerplate 프로젝트의 포크입니다.
MIT