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