EAServer 組件的生命週期

開發三層分佈是應用,咱們必需要了解組件的生命週期。windows

首先,當客戶端鏈接上eas,並建立完組件實例的時候,eas並無真正建立該組件的實例。客戶端執行createinstance方法,eas僅僅是對用戶指定的組件進行驗證,看是不是有效的組件,並能在當前受權下有效建立,也便是說,客戶端執行完createinstance後,eas並無真正在內存中建立這個組件的實例。緩存

當客戶端開始調用組件第一個函數的時候,eas要作以下工做:服務器

1,看指定的組件緩存池中是否有緩存的實例,若是沒有將建立該組件的實例,並觸發組件的構造事件。函數

2,一旦組件建立或則有可用的組件實例,則eas將把該組件實例和客戶端線程邦定,並觸發組件的activate事件。操作系統

3,執行客戶端調用的函數。線程

4,若是是有狀態組件,則函數執行完後,直接返回結果到客戶端,並保留該組件和客戶端線程的綁定,直到客戶端調用setcomplete()和setabort()或則組件函數結尾處調用setcomplete()和setabort()。生命週期

5,當組件事務被提交或會滾後,將致使對數據的操做的提交和會滾。完成組件的客戶端會話。進程

6,將組件和客戶端線程解除綁定,並觸發組件的deactivate事件。事件

7,判斷當前組件屬性中是否支持緩存池,若是不支持,或則當前緩存池已經超過了設置的最大緩存個數,默認不限制個數。則eas將會觸發組件的析構事件,並將組件從內存中銷燬。事務

8,若是組件能夠緩存,將組件放入到緩存池中供下次調用

一旦客戶端建立完組件並調用完函數,只要客戶端不斷開鏈接,則,客戶端能夠繼續調用組件的函數,這就是eas的按需鏈接的功能。這個功能將大大節省服務器的資源消耗。

前面提到了客戶端線程的概念,這裏有必要特別說明一下。

當客戶端執行鏈接到客戶端,並經過受權認證後,eas將會自動建立一個服務器端線程來和該客戶端進行通訊,這個線程就是客戶端線程(好像有點拗口喲!),在pb9,以及之後的版本中,默認是不要綁定客戶端線程的,也就是說一旦完成一次函數的調用,組件和客戶端線程解除綁定後,這個線程將進入到eas的線程池,共其餘客戶端使用。這樣無形之中就提升了服務器的效能。由於在操做系統的線程資源也是有限的。尤爲是windows,給每一個進程分配的可用線程都是有限制的。

但在pb8的時候,由於pb8虛擬機的侷限性,你必需要選擇綁定線程,而綁定線程的結果,就是,就算客戶端完成了一次函數調用,並把組件和線程解除綁定,則該線程也不會被其餘客戶端使用,直到該客戶端斷開鏈接,則該線程將被eas銷燬掉。這是很浪費系統資源的。但pb8的組件,必需要選擇綁定線程,切記!

相關文章
相關標籤/搜索