Actions
  Protocol core-core Version 3 » History » Revision 32
      « Previous |
    Revision 32/73
      (diff)
      | Next »
    
    Greg Burri, 07/09/2009 05:16 PM 
    
    
Protocols¶
This page describes the protocols used by Aybabtu for network communication between cores and between core and GUI.
Core <-> Core¶
See source:protos/network_protocol.proto for message details.
Downloading threads¶
There is NbDownloadThread threads. Each thread will choose a free chunk and download it.
There is no more than one downloading from B to A. A peer which a download is active is setted as not free.
F : the list of all unfinished download
C : A list of chunk candidates (empty at start)
While not end of F
   - Take the next file in F -> f.
   If the hash chunks of a file are unknown :
      - Ask the hashes to the source (see the message 'GetHashes').
   For each chunk not downloaded or not being downloaded -> c :
      If c has a free peer :
         - add c to C
   If C isn't empty :
      - Take the best chunk in C based on peer.downloadRate.
        If there is more than one best chunk then choose one randomly.
      - Grab the lock for the peer
      - Request the download   
	
Parameters¶
Most parameters will be stored as constants in their component.
| Name | Value | Unit | Explanation/Comments | 
|---|---|---|---|
| IMAliveFrequency | 0.1 | [Hz] | The message IMAlive is sent each 10s. | 
| ChunkSize | 33554432 | [Byte] | (32 MB) | 
| LanSpeed | 52428800 | [Byte/s] | (50 MB/s) | 
| 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 | 
| 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. | 
| 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. | 
| 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. | 
| 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. | 
| FindTimeout | 15 | [s] | A search request is abandoned after 15 seconds from the start of the request. See message Find. | 
| GetHashesTimeout | 200 | [s] | Timeout for the message GetHashes. | 
| GetChunkTimeout | 10 | [s] | Timeout for the message GetChunk. | 
| HaveChunksTimeout | TimeBetweenChunksUpdate = 10 | [s] | Timeout for the message HaveChunks. | 
| GetEntriesTimeout | 10 | [s] | Timeout for the message GetEntries. | 
| NbDownloadThread | 3 | - | Number of concurrent downloading thread. | 
| BufferSize | 1048576 | [Byte] | (1MB). This buffer is user when reading or writing a file. | 
| TCPSocketBufferSize | 33554432 | [Byte] | (32Mo). Used when data are received. See QAbstractSocket::setReadBufferSize. | 
Core <-> GUI¶
Updated by Greg Burri over 16 years ago · 73 revisions