當連線某個流的實體在一段時間內沒有接收到同樣連線到該流的另一對等端發來的任何xmpp資訊,那麼該對等端可能是無響應的。有幾個原因很可能引起這種情況發生:
底層的tcp連線死掉。
儘管當底層的tcp連線仍然是啟用的時候,xml流被中斷了。
對等端是空閒的,只是沒有通過其連線的xml流傳送xmpp資訊到該實體。
這三個條件最好被分別對待,像下面章節描述的一樣。
實現注意:為了處理無響應的對等端,我們把兩個單向的tcp連線當作乙個在概念上相當的雙向的tcp連線(見4.5節(
方向性));然而,實現者要知道在兩個單向的tcp連線的情況下,在xmpp應用層對等端對通訊的響應將從其第二個tcp連線返回。此外,在每個方向上的多個資料流的使用(大型的xmpp服務提供商間的伺服器到伺服器之間的連線經常這麼部署)使得對xmpp流和底層tcp連線的應用級檢查進一步複雜化了,因為任何給定的初始流和任何給定的響應流之間沒有必然聯絡。
死連線
如果底層的tcp連線是死的,流級別的檢查(例如:
[xep-0199]和
[xep-0198])是無效的。因此,不管有沒有流錯誤都沒必要關閉流,恰當的做法是直接終止tcp連線。
檢查tcp連線的乙個通用方法是在xml節之間傳送乙個空格符(u+0020),傳送空格在xml流中是被允許的,下面
第11.7節中將進行描述。傳送這樣的乙個空格被稱作「空格保持啟用」(詞語「whitespace ping」通常被使用,儘管事實上它不是乙個ping,因為「pong」是不可能的)。然而,在tls認證和sasl認證期間,傳送空格符是不允許的,下面
第5.3.3節和
第6.3.5節將會描述。
中斷的流
即使底層的tcp連線仍然是啟用的,對等端很可能從來不對實體發出的xmpp通訊請求作出響應,不管是正常的節還是例如在
[xep-0199]中所定義的應用程式級別ping那樣的專門流通信檢查,或者在
[xep-0198]中定義的更全面的流管理協議。在這種情況下,對實體來說恰當的做法是傳送流錯誤(
第4.9.3.4節)來關閉中斷的流。
空閒對端
即使底層的tcp連線仍然啟用,並且流沒有被中斷,對等端很可能在一段時間內都沒有傳送xml節。在這種情況下,對等端可以(may)關閉流(像
第4.4節描述的一樣),而不是讓不再使用的流開啟著。如果空閒對等端沒有關閉流,那麼與該流關聯的另一端或者可以(may)通過使用第4.4節描述的握手方式來關閉該流,或者傳送乙個流錯誤(例如:(
第4.9.3.17節),如果實體已經到了開啟tcp連線數的限制,或者(
第4.9.3.14節),如果連線已超出本地超時政策)來關閉該流。然而,層(下面
第13.3節指定)的順序要符合,在得出對等端處於空閒狀態的結論前,另一端需要去核實底層tcp連線仍然是啟用的並且流沒有被中斷(前面已描述)。此外,在接受空閒對等端時最好寬容一點,因為經驗表明,這樣做可以提高在xmpp網路上通訊的可靠性,並且保持兩個伺服器之間的流比積極地去超時乙個流通常更有效。
記錄一次sqlplus客戶端無響應問題處理
上午給一台應用伺服器配置oracle客戶端,複製oracle客戶端壓縮包並解壓,配置環境變數後,測試可用就甩給維護人員了,下午收到通知sqlplus用不了!用不了!用不了!登陸伺服器 bash 4.1 id sql 可以用啊,沒有問題,與維護人員一番溝通後,了解到業務賬號配置了相關環境變數,sqlp...
12 4 客戶端響應解碼
客戶端響應解碼整體流程 1 nettycodecadapter internaldecoder.decode channelhandlercontext ctx,bytebuf input,listout 2 new nettybackedchannelbuffer bytebuf buffer 建...
Openfire伺服器和Spark客戶端配置
一 openfire伺服器的配置 在螢幕的右側有個openfire3.9.3,這個是目前最新的版本。3.1 點選launch admin進入配置伺服器介面 在語言中我們選擇簡體中文,點選右下角的continue 3.2伺服器配置 如果是本地訪問的話,我們就不需要改了,預設就可以。如果是區域網或者是外...