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 );