Project

General

Profile

Protocol core-core Version 3 » History » Version 36

Greg Burri, 07/09/2009 05:29 PM

1 1 Greg Burri
h1. Protocols
2
3
This page describes the protocols used by Aybabtu for network communication between cores and between core and GUI.
4
5 7 Greg Burri
h2. Core <-> Core
6 1 Greg Burri
7 22 Greg Burri
See source:protos/network_protocol.proto for message details.
8 21 Greg Burri
9 31 Greg Burri
h3. Downloading threads
10 29 Greg Burri
11
There is _NbDownloadThread_ threads. Each thread will choose a free chunk and download it.
12 23 Greg Burri
There is no more than one downloading from B to A. A peer which a download is active is setted as not free.
13
14
<pre>
15 27 Greg Burri
F : the list of all unfinished download
16
C : A list of chunk candidates (empty at start)
17
18 33 Greg Burri
- Take the first file in F -> f.
19
Loop :
20
   If the hash chunks of f are unknown :
21 32 Greg Burri
      - Ask the hashes to the source (see the message 'GetHashes').
22 27 Greg Burri
   For each chunk not downloaded or not being downloaded -> c :
23
      If c has a free peer :
24
         - add c to C
25
   If C isn't empty :
26 30 Greg Burri
      - Take the best chunk in C based on peer.downloadRate.
27 1 Greg Burri
        If there is more than one best chunk then choose one randomly.
28
      - Grab the lock for the peer
29
      - Request the download   
30 33 Greg Burri
      - Take the first file in F -> f.
31 34 Greg Burri
   Else :
32 33 Greg Burri
      - Take the next file in F -> f.
33 23 Greg Burri
</pre>
34
35 36 Greg Burri
h3. Updating peer to hash association thread
36 23 Greg Burri
37 36 Greg Burri
This thread will periodically grab the _NumberOfChunkToUpdate_ first chunks and request to all other peers what chunk they have.
38
39
If there is no chunk available the message will be send without hashes.
40 23 Greg Burri
41 8 Greg Burri
h3. Parameters
42
43 10 Greg Burri
Most parameters will be stored as constants in their component.
44
45 9 Greg Burri
|_.Name|_.Value |_.Unit|_.Explanation/Comments|
46 19 Greg Burri
| _IMAliveFrequency_ | 0.1 | [Hz] | The message _IMAlive_ is sent each 10s. |
47 14 Greg Burri
| _ChunkSize_ | 33554432 | [Byte] | (32 MB) |
48
| _LanSpeed_ | 52428800 | [Byte/s] | (50 MB/s) |
49 17 Greg Burri
| _TimeRecheckChunkFactor_ | 4 | - | If the time to download a chunk exceeds _TimeRecheckChunkFactor_ * _ChunkSize_ / _LanSpeed_ the peers are rescanned to choose a better one (better download rate). For example : 4 * 32 / 50 = 2.6 second |
50
| _SwitchToAnotherPeerFactor_ | 1.5 | - | During the recheck of the peers to choose a better one the other download rate must be above the current * 1.5. |
51
| _DownloadRateValidTime_ | 1500 / _LanSpeed_ = 300 s | [s] | (5 min). The download rate of a peer is only valid during this time after its last update. After that its rate is set to the maximum. | 
52 15 Greg Burri
| _TimeBetweenChunksUpdate_ | 500 / _LanSpeed_ = 10 s | [s] | Each 10 s a daemon will scan the _NumberOfChunkToUpdate_ first chunks from the first queued downloads to know which peer has which chunk. |
53 20 Greg Burri
| _NumberOfChunkToUpdate_ | 100 * _LanSpeed_ / _ChunkSize_ = 156 | - | The first 156 hash chunks (3 kB) will by send periodically to each peer. See message _HaveChunks_ in the proto file. |
54 19 Greg Burri
| _FindTimeout_ | 15 | [s] | A search request is abandoned after 15 seconds from the start of the request. See message _Find_. |
55 25 Greg Burri
| _GetHashesTimeout_ | 200 | [s] | Timeout for the message _GetHashes_. |
56 19 Greg Burri
| _GetChunkTimeout_ | 10 | [s] | Timeout for the message _GetChunk_. |
57
| _HaveChunksTimeout_ | _TimeBetweenChunksUpdate_ = 10 | [s] | Timeout for the message _HaveChunks_. |
58 1 Greg Burri
| _GetEntriesTimeout_ | 10 | [s] | Timeout for the message _GetEntries_. |
59 23 Greg Burri
| _NbDownloadThread_ | 3 | - | Number of concurrent downloading thread. |
60 35 Greg Burri
| _BufferSize_ | 1048576 | [Byte] | (1MB). This buffer is used when reading or writing a file. |
61 26 Greg Burri
| _TCPSocketBufferSize_ | 33554432 | [Byte] | (32Mo). Used when data are received. See _QAbstractSocket::setReadBufferSize_. |
62 8 Greg Burri
63 7 Greg Burri
h2. Core <-> GUI