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