每個(gè)客戶端用
TCP
連接到具體的服務(wù)器。服務(wù)器給客戶端分配一個(gè)
ID
,這個(gè)
ID
用來標(biāo)示其后與服務(wù)器的會(huì)話中該客戶端(高
ID
客戶端總是按照它的
IP
地址來分配)。電騾
GUI
客戶端為了運(yùn)行而請(qǐng)求建立服務(wù)器連接。客戶端不能同時(shí)連接幾個(gè)服務(wù)器并且不能在沒有用戶的干預(yù)下動(dòng)態(tài)改變服務(wù)器。
1.1
??????????????????????
連接建立
當(dāng)建立一個(gè)到服務(wù)器的連接時(shí),客戶端可能嘗試同時(shí)連接幾個(gè)服務(wù)器,拋棄其他的連接嘗試不談,這里僅僅描述成功登錄的序列:
圖
2.1
:高
ID
客戶端連接序列圖
有幾種可能連接建立的用例:
1.?
高
ID
連接
-
服務(wù)器分配一個(gè)高
ID
給正在連接的客戶端
2.?
低
ID
連接
-
服務(wù)器分配一個(gè)低
ID
給正在連接的客戶端
3.?
拒絕會(huì)話
-
服務(wù)器拒絕客戶端
當(dāng)然,有些小的用例,服務(wù)器
DOWN
了或不可達(dá)。
圖
2.1
描述了建立一個(gè)高
ID
連接的報(bào)文序列圖。這個(gè)例子中,客戶端建立一個(gè)到服務(wù)器的
TCP
連接,然后發(fā)送登錄消息給服務(wù)器;服務(wù)器連接使用另一個(gè)
TCP
連接到客戶端來指定一個(gè)客戶端到客戶端的握手,來確保正在連接的客戶端可以接受其他電騾客戶端的連接。在完成客戶端握手后,服務(wù)器關(guān)閉第二個(gè)連接,完成客戶端
-
服務(wù)器握手并且發(fā)送一個(gè)
ID
改變消息。你可能注意到電騾信息報(bào)文是灰色的。這是因?yàn)檫@些信息是電騾協(xié)議擴(kuò)展(
1.6
節(jié))。
圖
2.2
:低
ID
客戶端連接序列圖
圖
2.2
描述建立低
ID
連接的消息序列圖。這種情況下,服務(wù)器發(fā)出到客戶端的連接超時(shí)而失敗,因此客戶端被分配一個(gè)低
ID
。服務(wù)器消息通常包含一個(gè)警告,例如:“
Warning[
服務(wù)器細(xì)節(jié)
]-You have a lowed. Please review your network configure and/or your setting.
”
圖
2.3
描述拒絕會(huì)話的序列。服務(wù)器可能拒絕會(huì)話的原由有:客戶端有一個(gè)低的
ID
或當(dāng)連接達(dá)到服務(wù)器的容量極限時(shí)。服務(wù)器消息包含一個(gè)描述拒絕原因的短字符串。
圖
2.3
:服務(wù)器拒絕會(huì)話序列
1.2
??????????????????????
連接開始報(bào)文交互
在連接成功建立之后,客戶端和服務(wù)器交換幾個(gè)安裝信息。這些消息的目的是更新雙方知道的其他端的狀態(tài)??蛻舳艘蕴峤环?wù)器共享文件(
6.2.4
節(jié))列開始,然后請(qǐng)求更新它的服務(wù)器列表。服務(wù)器發(fā)送它的狀態(tài)和版本(
6.2.6
和
6.2.2
節(jié)),然后發(fā)送它知道的電騾服務(wù)器并提供其他一些自標(biāo)示信息。最終,客戶端請(qǐng)求源(其他的可以提供下載文件的客戶端),服務(wù)器以一系列報(bào)文來響應(yīng),一個(gè)是客戶端下載列表中的每個(gè)文件,直到所有的源列表都被下載到客戶端為止。圖
2.4
描述這個(gè)序列。
圖
2.4
:連接開始序列圖
1.3
??????????????????????
文件搜索
文件收縮由用戶來初始化;操作簡(jiǎn)單,一個(gè)搜索請(qǐng)求(見
6.2.9
節(jié))發(fā)送到服務(wù)器,服務(wù)器以一個(gè)搜索結(jié)果來響應(yīng)(
6.2.10
節(jié))。當(dāng)有多個(gè)結(jié)果的時(shí)候,搜索結(jié)果信息是壓縮的。下面,用戶選擇來下載一個(gè)或多個(gè)文件,客戶端然后請(qǐng)求源來下載選中的文件,服務(wù)器返回每個(gè)請(qǐng)求文件的源的列表(見
6.2.12
)。一個(gè)可選的服務(wù)器狀態(tài)信息可能在服務(wù)器找到源響應(yīng)之前發(fā)送給客戶端。狀態(tài)信息(見
6.2.6
節(jié))包含當(dāng)前用戶數(shù)和服務(wù)器支持的文件信息。重要的點(diǎn)是有一個(gè)后備
UDP
消息隊(duì)列,它是用來增強(qiáng)客戶端從它搜索列表中查詢?cè)吹哪芰Γ嗟男畔⒐?jié)
3
節(jié)。在驗(yàn)證了源是新的之后,電騾客戶端初始化一個(gè)連接嘗試和添加這些到源列表中。源聯(lián)系的順序和電騾客戶端接收他們的順序是相同的。圖
2.5
描述文件搜索時(shí)序。
電騾客戶端連接源的順序與這些源在連表中的順序是一樣。沒有優(yōu)先級(jí)機(jī)制來決定先連接誰。有個(gè)復(fù)雜的算法來解決在客戶端下載隊(duì)列中從同一個(gè)源請(qǐng)求下載幾個(gè)文件的情況(注意,電騾客戶端僅僅允許在客戶端之間有一個(gè)上傳連接)。選擇算法是基于用戶優(yōu)先級(jí)規(guī)范,在沒有優(yōu)先級(jí)指定的情況下,按照字母表的順序。網(wǎng)站上有處理源上傳多于一個(gè)文件的詳細(xì)描述。
圖
2.5
:文件搜索序列
1.4
??????????????????????
回調(diào)機(jī)制
回調(diào)機(jī)制設(shè)計(jì)用來克服低
ID
客戶端不能接受輸入的連接而因此不能共享文件給其他客戶端的。這個(gè)機(jī)智很簡(jiǎn)單:假設(shè)客戶端
A
和
B
連接到同一個(gè)電騾服務(wù)器,
A
請(qǐng)求一個(gè)在
B
上的文件,但
B
是低
ID
,
A
發(fā)送一個(gè)回調(diào)請(qǐng)求給服務(wù)器(見
6.2.13
節(jié)),請(qǐng)求服務(wù)器告訴
B
來主動(dòng)連接它(回調(diào))。服務(wù)器已經(jīng)有一個(gè)打開的
TCP
連接到
B
,它發(fā)送回調(diào)請(qǐng)求給
B
(
6.2.14
節(jié)),將
A
的
IP
地址和端口提供給
B
。
B
然后連接到
A
,將其上的一些文件(沒有更多頭)發(fā)送給
A
。顯然,只有高
ID
客戶端才能請(qǐng)求低
ID
客戶端回調(diào)(低
ID
的客戶端不能接收輸入連接)。圖
2.6
描述了回調(diào)信息的交換。
同樣有一個(gè)特性就是允許兩個(gè)低
ID
客戶端通過他們的服務(wù)器連接來交換文件;服務(wù)器作為一個(gè)中繼。大多數(shù)的服務(wù)器都不再支持這個(gè)功能了,因?yàn)榉?wù)器消耗增加。