U E D R , A S I H C RSS

Angels Camp/2015/Maget Downloader

개요

설계

  • Zerobot은 실제 토렌트 클라이언트가 구동될 서버에 httprequest를 보내어 마그넷과 사용자 정보 전달
  • 웹서버(Flask)는 이 magnet과 user의 정보를 저장(메모리에) transmission에 rpc로 torrent 다운로드를 시작
  • 사용자는 zerobot에 status, eta 명령어를 입력함으로 다운로드의 진행상황을 알 수 있으며 다운 완료시 파일 링크 제공
  • transmission은 빠른 다운로드를 위한 일반 회선과 안전한 다운로드를 위한 vpn회선 두가지가 있다.
  • 파일은 http의 형태로 nginx를 통해 다운로드 및 스트리밍 가능

구현

zerobot_code.png
[PNG image (100.56 KB)]

제로봇의 코드는 간단하다. 사용자로부터 명령을 받고 그 결과를 웹서버에 전달하고 결과를 받아와 사용자에게 보여준다.
command에는 down, status, eta가 있으며 각각 다운로드 시작, 다운로드 상태, 예상시간이다.

main_code.png
[PNG image (59.63 KB)]

Flask서버의 코드다. 제로봇으로부터 마그넷주소, 커맨드, 유저 이름을 전달받아 transmission rpc래퍼인 transhelper class로 토렌트를 조작한다.

transhelper_code.png
[PNG image (63.71 KB)]

transhelper는 flask서버로부터 전달받은 마그넷으로 transmission rpc를 이용해 다운로드를 시작하며 유저정보와 토렌트의 해쉬값으로 정보를 저장한다.

transmission_setting.png
[PNG image (65.76 KB)]

vpn회선의 transmission의 설정은 위와같다. bind-address-ipv4에 vpn의 ip를 적어준다. 그리고 rpc를 사용하기위해 rpc-enabled를 true로 설정한다.

nginx_config.png
[PNG image (58.02 KB)]

nginx의 설정은 다음과 같다. 대용량의 파일을 http로 전송하기 위해 사용되었으며 추후 https추가를 하기위해 flask서버와 리버스프록시로 구성되어있다.

structure.png
[PNG image (37.4 KB)]

전체적인 구조는 위와같다.
마그넷만 제로봇에 던져주면 자동으로 vpn을 통해 다운로드를 시작하며 완료시 다운받던가 스트리밍으로 빠르게 볼 수 있도록 http로 링크를 제공한다. Flask는 제로봇이 nodejs라 httprequest처리와 transmission rpc를 간단히 처리하기 위해 Python과 함께 사용하였다. Nginx는 대용량의 파일을 http로 streaming 지원과 추후 https 프록시를 위해 사용되었다. 한대의 머신에 vpn과 일반랜에서 각각 하나의 transmission이 구동되며 각각 용도에 맞게 사용할 수 있다.

실행결과는 다음과 같다.
result1.png
[PNG image (166.66 KB)]

result2.png
[PNG image (163.74 KB)]


느낀점

  • 이게 될까 하면서 해봤는데 되네;; 코드는 멘탈 쪼개지면서 짜서 더러워요;; 자세히보지마세요이민규
  • 같은 팀에 있었지만 보면 볼수록 대단......김동환
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:29
Processing time 0.0248 sec