欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種多線程事件分發(fā)方法和系統(tǒng)與流程

文檔序號:12596698閱讀:271來源:國知局
一種多線程事件分發(fā)方法和系統(tǒng)與流程

本發(fā)明涉及數據處理領域,特別涉及一種多線程事件分發(fā)方法和系統(tǒng)。



背景技術:

事件分發(fā)機制也基于Java的開發(fā)的系統(tǒng)中比較重要的一塊。事件類型有很多種,例如設備的屏幕,接收到觸摸的動作時,屏幕驅動把壓力信號(包括壓力大小,壓力位置等)傳遞給系統(tǒng)底層,然后操作系統(tǒng)經過一系列的處理,把觸摸事件一層一層的向上傳遞,最終事件會被準確的傳遞到產生事件的對象上,系統(tǒng)會遍歷每一個View對象,然后計算觸摸點在哪一個View中。在傳統(tǒng)的基于計算機界面的C/S系統(tǒng)中,事件的觸發(fā)一般由界面當中的一個按鈕或者操作觸發(fā),發(fā)生該事件的時候,客戶端會把該事件(如MouseLeftClick)捕獲,交給事件監(jiān)聽器(如MouseClickListener),再由監(jiān)聽器執(zhí)行對應的操作。在該類型的系統(tǒng)中,一個單獨的事件基本上是沒什么作用的,只有一個事件序列,才有意義。如觸摸屏,一個事件序列正常情況下,定義為DOWN、MOVE(0或者多個)、UP/CANCEL。事件序列以DOWN事件開始,中間會有0或者多個MOVE事件,最后以UP事件或者CANCEL事件結束?,F有技術的事件分發(fā)機制沒有對事件進行分類,也不能采用獨立的事件監(jiān)聽類對事件進行處理,因此處理速度慢、處理效率也不高。



技術實現要素:

本發(fā)明提供了一種多線程事件分發(fā)方法和系統(tǒng),解決了現有技術的事件分發(fā)機制處理速度慢、效率低的技術問題。

本發(fā)明解決上述技術問題的技術方案如下:一種多線程事件分發(fā)方法,包括以下步驟:

步驟1,通過客戶端事件觸發(fā)模塊產生至少一個客戶端事件;

步驟2,獲取所述客戶端事件,并按照預先定義的流程對所述客戶端事件進行處理,并向客戶端頁面返回處理結果;當處理過程中需要向服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給服務器;

步驟3,服務器獲取所述預設事件,并選擇與所述預設事件所屬類別對應的事件監(jiān)聽處理類,按照所述預設事件的優(yōu)先級順序對所述預設事件進行處理,并向客戶端頁面返回處理結果。

在上述技術方案的基礎上,本發(fā)明還可以做如下改進。

進一步,步驟1中,所述客戶端事件包括通過客戶端自帶的AWT模塊所觸發(fā)的ActionEvent事件和通過客戶端上自定義的ApplicationEvent模塊所觸發(fā)的自定義事件。

進一步,步驟2中,獲取所述客戶端事件并對所述客戶端事件進行處理包括以下步驟:

通過ActionListener接口監(jiān)聽所述ActionEvent事件,并把監(jiān)聽到的ActionEvent事件傳播給actionevent事件的監(jiān)聽器;

所述監(jiān)聽器接收actionevent事件,通過表單form的actionPerformed方法執(zhí)行與所述actionevent事件對應的處理函數,并啟動一個獨立處理線程,所述獨立處理線程通過調用Thread worker接口,對所述actionevent事件進行相應處理,直到所述actionevent事件處理完畢,線程終止。

進一步,所述獨立處理線程通過調用Thread worker接口,調用表單的界面處理方法和/或表單的數據處理方法對所述actionevent事件進行相應處理,當處理過程中根據業(yè)務需要產生所述自定義事件時,執(zhí)行表單的processApplicationEvent方法對所述自定義事件進行處理,直到所述自定義事件處理完成,線程終止。

進一步,所述步驟2中,當需要向服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給對應的服務器具體為:

當需要向服務器請求數據時,通過客戶端的第一模塊管理類生成與所請求的數據相對應的預設事件,并將所請求數據封裝在所述預設事件中,生成事件對象;所述客戶端包括至少一個第一模塊管理類;

對所述事件對象進行數據序列化,并通過socket通信的方式將序列化后的事件對象發(fā)送給連接服務器;

連接服務器接收所述事件對象,并判斷所述事件對象是否與本連接服務器相關聯,若是,則對所述事件對象進行處理;若否,則將所述事件對象存儲在消息服務器中,等待其他應用服務器對所述事件對象進行讀取。

進一步,步驟3中,連接服務器或者應用服務器通過消息監(jiān)聽線程持續(xù)監(jiān)聽所述事件對象,并通過ServerEventListener接口讀取與本服務器相關聯的事件對象。

進一步,步驟3中,連接服務器或應用服務器對獲取的所述事件對象進行處理均包括以下步驟:

將所述事件對象按照功能類別或者服務類別進行分類,每個類別具有對應的事件監(jiān)聽處理類;

根據所述事件對象的優(yōu)先級將所述事件對象存儲到不同的優(yōu)先級隊列中;

按照優(yōu)先級從高到低的順序,通過事件分發(fā)線程將所述事件對象從所述優(yōu)先級隊列中取出,并調用對事件進行監(jiān)聽的所有監(jiān)聽者的ProcessServerEvent方法,選擇對應的事件監(jiān)聽處理類對所述事件對象進行處理;所述事件監(jiān)聽處理類使用獨立線程對所述事件對象進行處理;

所述事件監(jiān)聽處理類對所述事件對象處理完畢并獲得所請求的數據后,通過socket通信的方式,將所請求的數據傳送給客戶端的第二模塊管理類進行處理;或者所述事件監(jiān)聽處理類對所述事件對象處理完畢且生成了新的服務器事件時,將所述新的服務器事件傳送到消息服務器,等待相關聯的其他應用服務器進行讀取,直到獲得所請求的數據后,通過socket通信的方式,將所請求的數據傳送給客戶端的第二模塊管理類進行處理;或者所述事件監(jiān)聽處理類對所述事件對象處理完畢且生成新的客戶端事件時,采用socket通信的方式將所述客戶端事件分發(fā)給對應的至少一個客戶端。

為解決本發(fā)明的技術問題,還提供了一種多線程事件分發(fā)系統(tǒng),包括消息服務器、連接服務器和至少一個客戶端,所述客戶端包括客戶端事件觸發(fā)模塊、客戶端事件監(jiān)聽模塊、客戶端事件處理模塊和客戶端事件請求模塊,

所述客戶端事件觸發(fā)模塊,用于產生至少一個客戶端事件;

所述客戶端事件監(jiān)聽模塊,用于獲取所述客戶端事件;

所述客戶端事件處理模塊,用于按照預先定義的流程對所述客戶端事件進行處理,并向客戶端頁面返回處理結果;

所述客戶端事件請求模塊,用于當處理過程中需要向應用服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給連接服務器;

所述連接服務器用于接收所述預設事件,并判斷所述預設事件是否與本服務器相關聯,若是,則選擇與所述預設事件所屬類別對應的事件監(jiān)聽處理類,按照所述預設事件的優(yōu)先級順序對所述預設事件進行處理,并向客戶端頁面返回處理結果;若否,則將所述事件對象存儲在消息服務器中,等待其他應用服務器進行讀取。

進一步,所述客戶端事件監(jiān)聽模塊具體用于通過ActionListener接口監(jiān)聽所述ActionEvent事件,并把監(jiān)聽到的ActionEvent事件傳播給所有的actionevent事件的監(jiān)聽器;

所述客戶端事件處理模塊具體用于通過監(jiān)聽器接收actionevent事件,并通過表單form的actionPerformed方法執(zhí)行與所述actionevent事件對應的處理函數,并啟動一個獨立處理線程,所述獨立處理線程通過調用Thread worker接口,對所述actionevent事件進行相應處理,直到所述actionevent事件處理完畢,線程終止;同時,當處理過程中需要向服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給對應的服務器;

所述客戶端事件請求模塊具體用于當需要向連接服務器請求數據時,通過客戶端的第一模塊管理類生成與所請求的數據相對應的預設事件,并將所請求數據封裝在所述預設事件中,生成事件對象;并對所述事件對象進行數據序列化后通過socket通信的方式將序列化后的事件對象發(fā)送給連接服務器。

進一步,所述連接服務器或應用服務器分別包括:

判斷模塊,用于判斷所述預設事件是否與本服務器相關聯;

服務器事件監(jiān)聽模塊,用于通過消息監(jiān)聽線程持續(xù)監(jiān)聽所述事件對象,并通過ServerEventListener接口讀取與本服務器相關聯的事件對象;

分類模塊,用于將所述事件對象按照功能類別或者服務類別進行分類,每個類別具有對應的事件監(jiān)聽處理類;

消息分發(fā)模塊,用于根據所述事件對象的優(yōu)先級將所述事件對象存儲到不同的優(yōu)先級隊列中;

事件分發(fā)模塊,用于按照優(yōu)先級從高到低的順序,通過事件分發(fā)線程將所述事件對象從所述優(yōu)先級隊列中取出,并調用對事件進行監(jiān)聽的所有監(jiān)聽者的ProcessServerEvent方法,選擇對應的事件監(jiān)聽處理類對所述事件對象進行處理;所述事件監(jiān)聽處理類使用獨立線程對所述事件對象進行處理;

事件處理模塊,用于調用所述事件監(jiān)聽處理類,并使用獨立線程對所述事件對象進行處理;所述事件監(jiān)聽處理類對所述事件對象處理完畢并獲得所請求的數據后,通過socket通信的方式,將所請求的數據傳送給客戶端的第二模塊管理類進行處理;或者所述事件監(jiān)聽處理類對所述事件對象處理完畢且生成了新的服務器事件時,將所述新的服務器事件傳送到消息服務器,等待相關聯的其他應用服務器進行讀取,直到獲得所請求的數據后,通過socket通信的方式,將所請求的數據傳送給客戶端的第二模塊管理類進行處理;或者所述事件監(jiān)聽處理類對所述事件對象處理完畢且生成新的客戶端事件時,采用socket通信的方式將所述客戶端事件分發(fā)給對應的至少一個客戶端。

本發(fā)明的有益效果是:本發(fā)明的方法和系統(tǒng)在事件處理過程中,在服務器側按照功能或者服務類別將事件劃分為多種類型,針對每種類型采用獨立的事件監(jiān)聽處理類進行處理,提高了事件處理的速度;同時在客戶端側也對事件進行模塊化處理,并且有多個專門負責事件分發(fā)的線程進行處理,進一步提高了事件處理的速度。

附圖說明

圖1為本發(fā)明一種多線程事件分發(fā)方法的流程示意圖;

圖2為本發(fā)明一種多線程事件分發(fā)系統(tǒng)的結構示意圖。

具體實施方式

以下結合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。

如圖1所示,為本發(fā)明一種多線程事件分發(fā)方法的流程示意圖,包括以下步驟:

步驟1,通過客戶端事件觸發(fā)模塊產生至少一個客戶端事件;

步驟2,獲取所述客戶端事件,并按照預先定義的流程對所述客戶端事件進行處理,并向客戶端頁面返回處理結果;當處理過程中需要向服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給服務器;

步驟3,服務器獲取所述預設事件,并選擇與所述預設事件所屬類別對應的事件監(jiān)聽處理類,按照所述預設事件的優(yōu)先級順序對所述預設事件進行處理,并向客戶端頁面返回處理結果。

以下通過“交易請求發(fā)起,發(fā)送到服務器端,服務器接受到該請求后,服務器的處理過程”作為例子對上述步驟進行說明。

步驟1,用戶趙六通過客戶端發(fā)送事件到服務器,具體為:

(1)用戶趙六通過交易發(fā)起面板發(fā)起交易,交易內容包括交易ID為001,交易類型為即時回復,交易品種為鋼材,交易限定時間為30分鐘,交易價格為10萬。

(2)AWT根據自身機制,生成ActionEvent。

(3)ActionEvent監(jiān)聽器通過DealPanel,監(jiān)聽到該交易事件,并調用actionPerformed方法。

(4)構造請求數據BuildRequest()后,啟動一個新的ThreadWorker線程。所述新的ThreadWorker線程調用表單的數據處理方法(doCommonWork)向連接服務器請求數據,連接服務器接收請求事件“getGuestListEvent”,并在內存中讀取數據,生成發(fā)送對象列表,然后將發(fā)送對象列表返回給ThreadWorker線程;本實施例中,發(fā)送對象列表中包括:張三、李四、王五三個人。

(5)ThreadWorker線程調用表單的界面處理方法(doAWTWork)將取得的發(fā)送對象列表返回給畫面主線程,此時ThreadWorker線程結束。

(6)用戶趙六的客戶端取得ThreadWorker線程返回的發(fā)送對象列表,并彈出發(fā)起確認畫面。

(7)用戶趙六的客戶端通過發(fā)起確認面板發(fā)起交易,并確認將步驟(1)中的交易內容發(fā)送到發(fā)送對象列表中的張三、李四、王五三個人。

(8)客戶端的交易請求管理監(jiān)聽類(inquiryManager)調用函數submitInquiry(),生成交易請求事件(DealRequestEvent),將畫面的請求數據封裝在該交易請求事件中。具體為:

交易請求事件(Deal_Request)

事件名稱:DealRequestAction

數據:交易請求事件(DealRequestEvent),其中包括交易ID,交易類型,交易限定時間,交易價格,發(fā)送對象列表等。

(9)通過Map將所述事件對象DealRequestEvent數據序列化,并通過socket通信函數(sendDataToServer)發(fā)送給服務器。

步驟2,服務器側對事件對象進行處理,具體為:

(10)連接服務器接受到客戶端事件,事件名稱為DealRequestAction;數據為交易請求事件(DealRequestEvent)。

(11)由于本連接服務器不處理該事件(DealRequestAction),故將該事件消息發(fā)送到消息服務器中進行存儲,并等待其他的應用服務器對該事件進行讀取。

(12)此時,一個應用服務器AS的常駐消息服務器監(jiān)聽線程監(jiān)聽到該事件后,采用監(jiān)聽器InquiryManageListener處理該事件,具體為:

處理函數:performInquiryAction

處理事件名稱:DealRequestAction

數據:交易請求事件(DealRequestEvent)。

(13)AS服務器中,將這條交易信息插入到數據庫。在AS服務器中,根據該筆交易的交易ID:001,狀態(tài)機ID:21,當前狀態(tài)ID:14,當前操作:發(fā)起交易,找到該狀態(tài)機的下一個狀態(tài)信息。

(14)更新該筆交易的狀態(tài)機流程信息后,生成新的服務器事件(DealRequestActionReply)。

(15)由于本AS服務器不處理該事件(DealRequestActionReply),故將該事件消息發(fā)送到消息服務器進行存儲,并等待其他的連接服務器或者應用服務器進行讀取。

(16)此時,連接服務器的常駐消息服務器監(jiān)聽線程監(jiān)聽到該事件(事件名稱:DealRequestActionReply),并匹配該事件的分發(fā)對象列表,通過socket通信的方式分別向列表內的對象(張三、李四、王五)發(fā)送信息。

(17)交易請求管理監(jiān)聽類(inquiryManager)調用函數ReceiveInquiry(),進行彈窗處理,此時張三、李四、王五的客戶端上分別出現彈窗,以張三為例,具體為:

交易請求接收面板

交易ID:001

交易類型:即時回復

交易品種:鋼材

交易限定時間:30分鐘

交易價格:10萬

狀態(tài):議價回復中

發(fā)送方:趙六

接受方:張三。

如圖2所示,為本發(fā)明一種多線程事件分發(fā)系統(tǒng)的結構示意圖,包括消息服務器、連接服務器和至少一個客戶端,所述客戶端包括客戶端事件觸發(fā)模塊、客戶端事件監(jiān)聽模塊、客戶端事件處理模塊和客戶端事件請求模塊,

所述客戶端事件觸發(fā)模塊,用于產生至少一個客戶端事件;

所述客戶端事件監(jiān)聽模塊,用于獲取所述客戶端事件;

所述客戶端事件處理模塊,用于按照預先定義的流程對所述客戶端事件進行處理,并向客戶端頁面返回處理結果;

所述客戶端事件請求模塊,用于當處理過程中需要向應用服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給連接服務器;

所述連接服務器用于接收所述預設事件,并判斷所述預設事件是否與本服務器相關聯,若是,則選擇與所述預設事件所屬類別對應的事件監(jiān)聽處理類,按照所述預設事件的優(yōu)先級順序對所述預設事件進行處理,并向客戶端頁面返回處理結果;若否,則將所述事件對象存儲在消息服務器中,等待其他應用服務器進行讀取。

本實施例中,所述客戶端事件監(jiān)聽模塊具體用于通過ActionListener接口監(jiān)聽所述ActionEvent事件,并把監(jiān)聽到的ActionEvent事件傳播給所有的actionevent事件的監(jiān)聽器;

所述客戶端事件處理模塊具體用于通過監(jiān)聽器接收actionevent事件,并通過表單form的actionPerformed方法執(zhí)行與所述actionevent事件對應的處理函數,并啟動一個獨立處理線程,所述獨立處理線程通過調用Thread worker接口,對所述actionevent事件進行相應處理,直到所述actionevent事件處理完畢,線程終止;同時,當處理過程中需要向服務器請求數據時,將與所請求的數據相對應的預設事件發(fā)送給對應的服務器;

所述客戶端事件請求模塊具體用于當需要向連接服務器請求數據時,通過客戶端的第一模塊管理類生成與所請求的數據相對應的預設事件,并將所請求數據封裝在所述預設事件中,生成事件對象;并對所述事件對象進行數據序列化后通過socket通信的方式將序列化后的事件對象發(fā)送給連接服務器。

本實施例中,所述連接服務器或應用服務器分別包括:

判斷模塊,用于判斷所述預設事件是否與本服務器相關聯;

服務器事件監(jiān)聽模塊,用于通過消息監(jiān)聽線程持續(xù)監(jiān)聽所述事件對象,并通過ServerEventListener接口讀取與本服務器相關聯的事件對象;

分類模塊,用于將所述事件對象按照功能類別或者服務類別進行分類,每個類別具有對應的事件監(jiān)聽處理類;

消息分發(fā)模塊,用于根據所述事件對象的優(yōu)先級將所述事件對象存儲到不同的優(yōu)先級隊列中;

事件分發(fā)模塊,用于按照優(yōu)先級從高到低的順序,通過事件分發(fā)線程將所述事件對象從所述優(yōu)先級隊列中取出,并調用對事件進行監(jiān)聽的所有監(jiān)聽者的ProcessServerEvent方法,選擇對應的事件監(jiān)聽處理類對所述事件對象進行處理;所述事件監(jiān)聽處理類使用獨立線程對所述事件對象進行處理;

事件處理模塊,用于調用所述事件監(jiān)聽處理類,并使用獨立線程對所述事件對象進行處理;所述事件監(jiān)聽處理類對所述事件對象處理完畢并獲得所請求的數據后,通過socket通信的方式,將所請求的數據傳送給客戶端的第二模塊管理類進行處理;或者所述事件監(jiān)聽處理類對所述事件對象處理完畢且生成了新的服務器事件時,將所述新的服務器事件傳送到消息服務器,等待相關聯的其他應用服務器進行讀取,直到獲得所請求的數據后,通過socket通信的方式,將所請求的數據傳送給客戶端的第二模塊管理類進行處理;或者所述事件監(jiān)聽處理類對所述事件對象處理完畢且生成新的客戶端事件時,采用socket通信的方式將所述客戶端事件分發(fā)給對應的至少一個客戶端。

本發(fā)明的一種多線程事件分發(fā)方法和系統(tǒng),當客戶端發(fā)生事件的時候,首先被傳遞到對應監(jiān)聽器(如MouserClickListener),處理該事件后,再生成一個新的應用程序事件ApplicationEvent,客戶端監(jiān)聽到該事件的監(jiān)聽器ApplicationEventListener繼續(xù)處理該事件,一級一級傳遞,直到最后傳送到底層監(jiān)聽器,底層監(jiān)聽器再將該事件通過socket發(fā)送到服務器。服務器接受到事件后,會產生新的服務器事件ServerEvent,服務器事件監(jiān)聽器ServerListener監(jiān)聽到該事件后,會對所有的事件放到一個隊列里面,通過專門的分發(fā)線程來進行分發(fā)處理。本發(fā)明的方法和系統(tǒng)在事件處理過程中,在服務器側按照功能或者服務類別將事件劃分為多種類型,針對每種類型采用獨立的事件監(jiān)聽處理類進行處理,提高了事件處理的速度;同時在客戶端側也對事件進行模塊化處理,并且有多個專門負責事件分發(fā)的線程進行處理,進一步提高了事件處理的速度。

在本發(fā)明的描述中,需要理解的是,術語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術特征的數量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括至少一個該特征。在本發(fā)明的描述中,“多個”的含義是至少兩個,例如兩個,三個等,除非另有明確具體的限定。

在本說明書的描述中,參考術語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結合該實施例或示例描述的具體特征、結構、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不必須針對的是相同的實施例或示例。而且,描述的具體特征、結構、材料或者特點可以在任一個或多個實施例或示例中以合適的方式結合。此外,在不相互矛盾的情況下,本領域的技術人員可以將本說明書中描述的不同實施例或示例以及不同實施例或示例的特征進行結合和組合。

盡管上面已經示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領域的普通技術人員在本發(fā)明的范圍內可以對上述實施例進行變化、修改、替換和變型。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
南汇区| 内乡县| 中西区| 五家渠市| 亚东县| 赤峰市| 板桥市| 华池县| 佛教| 江口县| 滕州市| 勃利县| 通榆县| 承德市| 甘洛县| 定安县| 特克斯县| 西平县| 库尔勒市| 鹤壁市| 嘉黎县| 施秉县| 洛隆县| 朔州市| 金山区| 景东| 山丹县| 凤凰县| 临澧县| 射阳县| 房山区| 长兴县| 繁峙县| 封开县| 阿拉善右旗| 铁力市| 新河县| 西盟| 桑日县| 宜都市| 鸡泽县|