Win32 RPC 編程(四)

 

Win32 RPC 編程(四) 示例下載編程

這節咱們來談談 Windows NT 下 RPC 的高性能模式 - LPC。sass


不少 Windows 編程入門的書裏面講 Windows 的進程間通訊,都會講 WM_COPYDATA,講匿名管道,講命名管道,講共享內存等等,可是不多有講 RPC 的,爲何呢?由於 RPC 看名字,就叫「Remote Procedure Call」,一看就是給分佈式系統通訊用的,雖然也能夠做爲本機進程間通訊用,可是性能上老是讓人懷疑。因此不少人設計的進程間通訊模型,都是用 WM_COPYDATA,或者管道,或者乾脆共享內存,至關於本身造輪子,一切從頭作起。但 RPC 確實好用啊,調用起來就像調用庫函數同樣,通訊的細節全給你封裝起來了。那 RPC 有沒有性能好一點的模式呢?這就是下面要講的 LPC 模式了。分佈式

LPC(Local Procedure Call)是 Windows NT 內部的高性能的通訊模式。它是在內核中實現的,主要用於 Win32 子系統內部的通訊,好比 csrss, lsass 都大量的用到了 LPC。在前面演示的代碼中,只須要改一行代碼,咱們就可以使用 LPC 了,其實 RPC 就是內部使用 LPC 來進行通訊,性能大大提升。ide


服務端代碼:函數

server.c性能

--------------spa

// 用LPC 方式通訊設計

RpcServerUseProtseqEp(server

    (unsigned char *)"ncalrpc", blog

    RPC_C_PROTSEQ_MAX_REQS_DEFAULT, 

    (unsigned char *)"AppName", 

    NULL);


客戶端代碼:

client.c

// 用LPC 方式通訊

// 第3 個參數NetworkAddr 只能取NULL

RpcStringBindingCompose( 

    NULL, 

    (unsigned char*)"ncalrpc", 

    NULL, (unsigned char*)"AppName", 

    NULL, 

    &pszStringBinding );

相關文章
相關標籤/搜索