隱含遺忘

LU 6.2 同步點會話可利用一種稱為隱忘(implied forget)的架構訊息流優化方式。 當協定指定需要提供 FORGET 呈現標頭(PS)時,會話中的下一個資料流會暗示已接收到 FORGET 訊息,即便實際上並未收到。 在正常情況下,TP 在其 Sync Point 對話中接收或傳送資料時,會知道下一個資料流。

然而,最後流出的訊息也可能是因為對話被分配而產生的。 在這種情況下,TP 不知道該會話中下一個資料流何時發生。 為了提供此通知, DEALLOCATE 與 MC_DEALLOCATE 動詞被修改,使TP能註冊回調函式,該函式將被呼叫:

  • 在對話所使用的會話中進行的第一次正常流程傳輸(請求或回應)。

  • 如果會話在任何其他資料流動之前解除綁定。

  • 如果會話因資料鏈路控制(DLC)中斷而異常終止。

    回調程序可以取任何名稱,因為程序的位址會被傳遞到 APPC DLL。

    請注意,DEALLOCATE 和 MC_DEALLOCATE 動詞通常會在回呼例程被呼叫前完成。 對話被視為處於重置狀態,且無法再使用對話識別碼發出動詞。 如果應用程式在該會話的下一個資料流前發出 TP_ENDED 動詞,回調例程將不會被呼叫。

    DEALLOCATE和MC_DEALLOCATE動詞經過以下修改以支持隱含遺忘:

  • 新增一個成員 callback,讓 TP 能夠指定函式的位址,這個函式將在釋放對話所涉入的會話中於下一次資料流期間被呼叫。 若該成員為 NULL,則不會提供任何通知。 通常會有廠商提供此回撥功能。

  • DEALLOCATE和MC_DEALLOCATE動詞也包含一個相關成員,當呼叫回調函式時,該成員會作為參數回傳。 應用程式可以以任何方式使用此參數(例如,作為指向應用程式內控制區塊的指標)。

    主機整合伺服器允許TP在傳送資料後立即解除對話,方法是在和動詞中指定type成員為AP_SEND_DATA_DEALLOC_FLUSH、AP_SEND_DATA_DEALLOC_SYNC_LEVEL、AP_SEND_DATA_DEALLOC_ABEND、AP_SEND_DATA_DEALLOC_CONFIRM。 然而, SEND_DATA 動詞和 MC_SEND_DATA 動詞並不包含隱含的忘記回調功能。 希望收到隱含遺忘通知的參與者必須明確發出 DEALLOCATE 或 MC_DEALLOCATE 動詞。