當前位置:成語大全網 - 新華字典 - 淺談Mac進程間的通信- XPC

淺談Mac進程間的通信- XPC

XPC服務是集成了GCD和launchd的輕量級進程間通信機制。其主要目的是提供:分離的權力和穩定性。

XPC服務的啟動、監控和終止由launchd管理,比如崩潰恢復。當服務完成或空閑時,將由kill -9終止,kill-9可以更好地管理XPC服務的生命周期。

通過find/system/library/FrameWorks-name \ *搜索應用下的系統框架和XPC服務。XPC或查找/應用程序-名稱\*。xpc,我們可以發現xpc廣泛應用於系統框架、系統應用和第三方應用,比如Xcode、Chrome、CleanMyMac等等。但對於iOS,只能蘋果使用,第三方開發者不能使用(xcode中也沒有提供相應的模板)。

Apple提供了兩個API來處理xpc服務器:

下面將介紹使用上述接口創建XPC服務的典型情況。

XPC服務的典型應用是實現應用中組件之間的通信,以保證核心功能的穩定性。它的創建相對簡單。xcode已經提供了相應的模板,編譯後會直接添加到相應的應用包中。路徑為/contents/xpcsercies,其包結構與應用包類似,包括二進制程序、Info.plist文件和添加的資源文件。

Xcode默認以NSXPCConnection的形式創建服務模板。Info.plist中配置的XPCService字典ServiceType是Application,Info.plist還包含定義服務屬性和類型的其他字段,如下:

創建服務和偵聽連接典型用法如下:

xpc_main函數啟動服務並設置事件處理程序,其中事件處理程序XPCService_event_handler主要設置事件連接處理程序,xpc_connection_resume恢復連接;默認的連接處理隊列是DISPATCH_TARGET_QUEUE_DEFAULT,GCD處理隊列可以用xpc _ connection _ set _ TARGET _ QUEUE修改;Xpc_connect提供了同步或異步消息發送/接收接口,如下所示:

其中xpc _ connection _ send _ message _ with _ reply _ sync為同步接口,阻塞到收到回復消息,其余為異步接口;Xpc_connection_send_barrier可以在發送完最後壹條消息後設置執行塊,類似於dispatch fence接口。

消息發送實現如下圖所示:

其本質是通過mach_msg發送消息,即通過mach消息機制;

基於Objective-c的表單如下:

NSXPCConnection相關類提供了更高級的接口,通過NSX客戶端監聽服務連接,通過指定NSXPCListenerDelegate的代理方法處理新的連接請求:listener:shouldaceptnewconnection:NSXPCConnection屬性exportedInterface和exportedObject用於指定導出接口(由協議實現)和對象,用於對端服務進程分別通過指定的NSXPCConnection屬性remoteObjectInterface和remoteObjectProxy獲取遠程協議的導出接口和導出對象,從而實現本地調用

典型的界面如下:

主要流程如下:

創建的xpc_connection_t連接對象可以通過全局對象保存,用於為後續消息發送/接收相同的連接消息;

典型用法如下:

壹般流程如下:

通過initWithServiceName創建NSXPCConnection對象,通過interfaceWithProtocol指定約定的協議方法,resume啟動連接;當通過remoteObjectProxy對象調用xpc服務的方法時,launchd將在應用程序包中搜索匹配的xpc服務並啟動該服務,通過創建xpc服務的代理方法來接口連接,並執行導出接口方法。

與其他進程間通信方式相比,如ns distributed Notification Center、Mach Port、domain socket等。,XPC服務更輕便,不需要管理子流程的生命周期,可以實現子流程的恢復功能。通過NSXPCConnection相關的高級接口可以方便的實現遠程過程調用,更加簡潔易用。

XPC

XPC簡介

XPC API

創建XPC服務

守護程序和服務編程指南

介紹XPC

用XPC實現多進程間的通信

“了解麥克·OS X &;IOS操作系統”

進程間通信(OSX/iOS)