?? policy.h
字號(hào):
#ifndef POLICY_H
#define POLICY_H
#include "peer.h"
// 本文件實(shí)現(xiàn)了bittorrent協(xié)議的一些關(guān)鍵算法,主要有:
// 流水作業(yè)(一次生成對(duì)某個(gè)peer的多個(gè)slice請(qǐng)求,一般為5個(gè))
// 片斷選擇算法(針對(duì)不同的下載階段,有不同的選擇策略)
// 阻塞算法(根據(jù)速度選擇非阻塞peer)以及選擇優(yōu)化非阻塞peer
// 判斷是否下載完畢(根據(jù)位圖作出判斷,下載完畢即終止程序)
// 每隔10秒計(jì)算一次各個(gè)peer的上傳下載速度
#define COMPUTE_RATE_TIME 10
// 以下結(jié)構(gòu)體存儲(chǔ)下載速度最快的4個(gè)peer的指針
#define UNCHOKE_COUNT 4
// 每次請(qǐng)求的slice數(shù)
#define REQ_SLICE_NUM 5
typedef struct _Unchoke_peers {
Peer* unchkpeer[UNCHOKE_COUNT];
int count;
Peer* optunchkpeer;
} Unchoke_peers;
void init_unchoke_peers(); // 初始化全局變量unchoke_peers
int select_unchoke_peer(); // 選擇unchoke peer
int select_optunchoke_peer(); // 從peer隊(duì)列中選擇一個(gè)優(yōu)化非阻塞peer
int compute_rate(); // 計(jì)算最近一段時(shí)間(10秒)每個(gè)peer的上傳下載速度
int compute_total_rate(); // 計(jì)算總的上傳下載速度
int is_seed(Peer *node); // 判斷某個(gè)peer是否為種子
// 構(gòu)造數(shù)據(jù)請(qǐng)求,為了提高效率一次請(qǐng)求5個(gè)slice
int create_req_slice_msg(Peer *node);
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -