基於fusion的DirectFB訊息流
在傳統的DirectFB應用中,所有的應用程式都在一個程式中,在效能上,有一些優勢,然而一個應用程式不穩定會造成整個系統的不穩定。若採用C/S模型,無疑是重蹈X Widnow的覆轍,會喪失效能上的優勢。
所以DirectFB採用了另外一種方式,與C/S相區別,稱之為主從模型(Master/Slave)。它加了一個稱之為fusion的核心模組。Fusion是熔化的意思,多個應用程式在不的程式空間裡,通過這個核心模組通訊,在這裡,一切都溶為一體了。Master應用程式負責初始化一個稱為竟技場的東西,其它Slave應用程式可以加入或者退出竟技場。當Master退出時,則其它所有Slave都必須退出。
Fusion裡採用了Reactor模式,每個應用程式可以通過ioctl向reactor註冊事件處理器,當有事件發生時,reactor會把事件寫入到所註冊了的應用程式的fusion檔案描述符時,之後應用程式可以從fusion檔案描述符裡讀取到事件資料。
當然,應用程式也可以通過ioctl傳送事件給其它應用程式,reactor時會把事件分發給其它應用程式。
下面以觸控式螢幕為例介紹筆點事件的過程:
1. 初始化時,driver_open_device建立一個程式,掛在/dev/input/event0上,等待筆點事件。
2. 初始化時,應用程式建立另外一個執行緒,掛在/dev/fusionN(不同的應用程式N值不同)上。
3. 當有筆點事件時,通過函式呼叫dfb_input_dispatch-->fusion_reactor_dispatch->ioctl (FUSION_REACTOR_DISPATCH)把訊息丟給核心模組。
4. 核心模組中的Reactor把事件資料寫入到各個所註冊的事件處理器的/dev/fusionN裡。
5. 應用程式從/dev/fusionN檔案中取得事件資料,並呼叫應用程式內部的reactor處理函式,一般是IDirectFBEventBuffer_InputReact/IDirectFBEventBuffer_WindowReact兩個函式。
6. 然後,在IDirectFBEventBuffer_InputReact/IDirectFBEventBuffer_WindowReact兩個函式中,呼叫IDirectFBEventBuffer_AddItem把事件加入到視窗的事件佇列中。
7. 在應用程式的主執行緒中,就可以通過呼叫視窗的GetEvent函式從事件佇列中獲取事件了,最後,把獲取的事件分發到各個視窗事件處理函式中。
DirectFB的官方網站:http://www.directfb.org
相關文章
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 基於TimeLine模型的訊息同步機制模型
- C++訊息框架-基於sigslotC++框架
- 基於公共信箱的全量訊息實現
- “訊息驅動、事件驅動、流 ”基礎概念解析事件
- 基於WebSocket的實時訊息傳遞設計Web
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- 物聯網閘道器開發:基於MQTT訊息匯流排的設計過程(上)MQQT
- KMQ:基於Apache Kafka的可靠性訊息佇列MQApacheKafka佇列
- Android 基於Netty的訊息推送方案之Hello World(一)AndroidNetty
- Knative 實戰:基於 Kafka 實現訊息推送Kafka
- 分散式事務:基於可靠訊息服務分散式
- .net core 訊息流處理流程
- SpringCloud(六)Bus訊息匯流排SpringGCCloud
- 手寫訊息匯流排LiveDataBusLiveData
- 基於Redis訊息的訂閱釋出應用場景Redis
- 基於tcp的應用層訊息邊界如何定義TCP
- Delayer 基於 Redis 的延遲訊息佇列中介軟體Redis佇列
- 基於workerman實現的web訊息推送站內信功能Web
- 基於可靠訊息方案的分散式事務:Lottor介紹分散式
- 關於RocketMQ的順序訊息MQ
- 好訊息!GitHub 已原生支援基於 JavaScript 的 Mermaid 圖表工具GithubJavaScriptAI
- 基於long pull實現簡易的訊息系統參考
- Android 基於Netty的訊息推送方案之概念和工作原理(二)AndroidNetty
- 基於訊息佇列(RabbitMQ)實現延遲任務佇列MQ
- 基於Liuli構建純淨的RSS公眾號資訊流
- Android 基於Netty的訊息推送方案之字串的接收和傳送(三)AndroidNetty字串
- 基於可靠訊息方案的分散式事務(二):Java中的事務分散式Java
- 基於可靠訊息方案的分散式事務(四):接入Lottor服務分散式
- [譯] 關於 PHP 7.4 的最新訊息PHP
- Spring Cloud Bus 訊息匯流排介紹SpringCloud
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- 我最喜歡的程式之間通訊方式-訊息匯流排
- 基於訊息佇列 RocketMQ 的大型分散式應用上雲最佳實踐佇列MQ分散式
- 訊息佇列 RocketMQ 5.0:從訊息服務到雲原生事件流平臺佇列MQ事件
- KafkaConsumer對於事務訊息的處理Kafka
- GTK+2.6 + DirectFB的幾個問題
- WebWorker與WebSocket實現前端訊息匯流排Web前端