2008-09-30 4 views
2

파일 공유를위한 미들웨어 시스템을 구현해야하며, 비트 토 런트에서 발생하는 것과 달리 파일을 분할해야합니다. 비트 토 런트는 varios 소스에서 개별 피스를 동시에 보내고받습니다. 어떻게해야합니까? 라이브러리인가요, 아니면 파일을 스스로 분할해야합니까?P2P 애플리케이션 용 파일 분할

답변

4

파일을 블록으로 나누어 각각 100KB라고 가정 해 보겠습니다. 그런 다음 각 블록에서 SHA 해시 (또는 다른 해싱 알고리즘)를 계산하십시오. 그래서 파일이 905KB라면 계산 된 해시가 10 개가됩니다.

서버에는 서비스를 제공하는 각 파일에 대한 해시 정의 파일이 포함됩니다. 이 해시 정의 파일에는 해시와 함께 파일의 모든 블록 목록이 포함됩니다. 따라서 서버가 test.exe라는 905KB 파일을 제공하고 있다면. 그런 다음 파일의 10 개 해시 목록이 들어있는 test.exe. hashes라는 또 다른 파일이 있습니다.

클라이언트는 해시 정의 파일을 다운로드하고 모든 블록이 있는지 확인합니다. 클라이언트는 각 블록을 개별적으로 요청할 수 있으며 다운로드 한 후 해시가 다시 없는지 확인하기 위해 해시를 다시 계산할 수 있습니다.

파일을 물리적으로 분할 할 필요는 없습니다. 파일을 분할하는 것은 관심있는 부분을 읽는 것입니다. 파일의 첫 번째 블록은 0에서 102399 사이의 바이트 범위에 있으며 다음 블록은 102400 ~ 204800 등입니다. 따라서 파일을 열고 해당 위치를 찾고 데이터를 읽고 파일을 닫습니다.

+0

환상적인 답변에 감사드립니다! –

0

분할 & Concat (GNU 소프트웨어)의 구현을 살펴보십시오.

+0

좋은 아이디어, 고마워! –

0

솔로몬 리드 인코딩을 사용하는 것이 좋습니다. 최종 블록을 훨씬 쉽게 얻을 수 있습니다. 이것은 Microsoft가 Avalaunch에서 취한 경로입니다.

0

관심 분야 : BitTorrent 또는 그와 비슷한 것을 구현하지 않는 이유는 무엇입니까? 많은 OpenSource 클라이언트 (예 : Azureus)가 있으며 프로토콜은 really simple입니다. an article with a little more detail도 있지만 여기에는 몇 가지 확장 기능이 포함되어 있습니다. 의심 스럽지만 공식 사양은 항상 옳습니다.