十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
RPC全稱為遠(yuǎn)程過程調(diào)用,是一種通過網(wǎng)絡(luò)通信的方式在不同的計(jì)算機(jī)之間進(jìn)行進(jìn)程間通信的技術(shù)。使用RPC技術(shù)可以方便地實(shí)現(xiàn)不同計(jì)算機(jī)之間的數(shù)據(jù)傳輸、軟件資源共享、任務(wù)協(xié)作等功能。本文將介紹在Linux系統(tǒng)下使用C語(yǔ)言實(shí)現(xiàn)RPC技術(shù)的過程及實(shí)踐。

鄂城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
一、RPC基本概念
RPC是指遠(yuǎn)程過程調(diào)用,是一種采用C/S模式在網(wǎng)絡(luò)傳輸層上實(shí)現(xiàn)的通信協(xié)議。它可以使不同計(jì)算機(jī)之間的進(jìn)程像調(diào)用本地函數(shù)一樣實(shí)現(xiàn)互相調(diào)用。在調(diào)用過程中,客戶端進(jìn)程調(diào)用遠(yuǎn)程進(jìn)程的某個(gè)函數(shù),而遠(yuǎn)程進(jìn)程在執(zhí)行完該函數(shù)后將結(jié)果返回給客戶端進(jìn)程,就像調(diào)用本地函數(shù)一樣。
RPC一般由以下四個(gè)部分組成:
1. 遠(yuǎn)程調(diào)用接口
遠(yuǎn)程調(diào)用接口定義了客戶端調(diào)用遠(yuǎn)程過程的方式和參數(shù),以及服務(wù)器端對(duì)遠(yuǎn)程調(diào)用的響應(yīng)方式和返回值。
2. 協(xié)議
協(xié)議規(guī)定了數(shù)據(jù)傳輸?shù)姆绞剑▊鬏攨f(xié)議、編碼方式以及數(shù)據(jù)格式等。RPC常用的數(shù)據(jù)傳輸協(xié)議有TCP/IP、UDP等。
3. 傳輸
傳輸層負(fù)責(zé)把數(shù)據(jù)從某個(gè)計(jì)算機(jī)的應(yīng)用層發(fā)送到另一個(gè)計(jì)算機(jī)的應(yīng)用層。在RPC中,傳輸通常使用Socket編程實(shí)現(xiàn)。
4. 程序
程序?qū)崿F(xiàn)了遠(yuǎn)程過程的本地部分和遠(yuǎn)程部分??蛻舳顺绦蜇?fù)責(zé)調(diào)用遠(yuǎn)程過程,并將參數(shù)傳遞給服務(wù)器端;服務(wù)器端程序負(fù)責(zé)監(jiān)聽客戶端請(qǐng)求,并執(zhí)行相應(yīng)的遠(yuǎn)程過程。
二、RPC工作流程
下面是RPC的基本工作流程:
客戶端調(diào)用函數(shù)時(shí),先將參數(shù)打包成可傳輸?shù)母袷剑ㄐ蛄谢?/p>
客戶端向服務(wù)端發(fā)送一個(gè)遠(yuǎn)程調(diào)用請(qǐng)求。請(qǐng)求中包括:遠(yuǎn)程過程的名稱、參數(shù)打包成的序列化數(shù)據(jù)等。
服務(wù)端收到請(qǐng)求后,將請(qǐng)求中的參數(shù)解析出來(反序列化),并執(zhí)行相應(yīng)的遠(yuǎn)程過程。
服務(wù)端處理完請(qǐng)求后,將結(jié)果打包成序列化的格式,并返回給客戶端。
客戶端收到結(jié)果后,對(duì)結(jié)果進(jìn)行反序列化,并返回調(diào)用結(jié)果。
三、使用C語(yǔ)言實(shí)現(xiàn)RPC
下面我們將使用C語(yǔ)言在Linux系統(tǒng)下實(shí)現(xiàn)一個(gè)簡(jiǎn)單的RPC服務(wù)器和客戶端,并進(jìn)行遠(yuǎn)程調(diào)用。
1. 環(huán)境準(zhǔn)備
首先需要安裝一個(gè)RPC工具包——ccrpc,安裝方式如下:
git clone https://github.com/qiunkuan/ccrpc.git
cd ccrpc
sudo make install
2. 創(chuàng)建服務(wù)端
在服務(wù)端,我們需要?jiǎng)?chuàng)建一個(gè)RPC函數(shù),用于處理客戶端請(qǐng)求。下面是一個(gè)簡(jiǎn)單的例子:
/*rpc_server.c*/
#include “ccrpc.hh”
int add(int a, int b)
{
return a + b;
}
int mn()
{
ccrpc_init();
ccrpc_add_func(add); //注冊(cè)函數(shù)
ccrpc_listen(9669); //監(jiān)聽端口
return 0;
}
運(yùn)行上述程序后,服務(wù)端將一直保持監(jiān)聽狀態(tài),等待客戶端的連接。
3. 創(chuàng)建客戶端
在客戶端,我們需要連接遠(yuǎn)程服務(wù)器,并向其發(fā)送一個(gè)請(qǐng)求。下面是一個(gè)簡(jiǎn)單的例子:
/*rpc_client.c*/
#include “ccrpc.hh”
int mn()
{
int ret = 0;
ccrpc_init();
ccrpc_connect(“127.0.0.1”, 9669); //連接服務(wù)器
ret = ccrpc_call(“add”, 1, 2); //調(diào)用遠(yuǎn)程函數(shù)
printf(“result: %d\n”, ret);
ccrpc_exit();
return 0;
}
運(yùn)行上述程序后,客戶端將向服務(wù)端發(fā)送一個(gè)請(qǐng)求,并打印出其返回的結(jié)果。
以上就是使用C語(yǔ)言在Linux系統(tǒng)下實(shí)現(xiàn)RPC技術(shù)的基本流程。當(dāng)然,實(shí)際使用中還需要考慮數(shù)據(jù)傳輸?shù)陌踩?、性能等因素,同時(shí)也要關(guān)注一些常見的問題,例如序列化和反序列化的實(shí)現(xiàn)細(xì)節(jié)、網(wǎng)絡(luò)通信中的錯(cuò)誤處理等。
四、
相關(guān)問題拓展閱讀:
Systemctl是一個(gè)systemd工具,主要負(fù)責(zé)控制systemd系統(tǒng)和服務(wù)管理器。
Systemd是一個(gè)系統(tǒng)扮告管理守護(hù)進(jìn)程、工具和庫(kù)的,用于取代System V初始進(jìn)程。Systemd的功能是用于集中管理和配置類UNIX系統(tǒng)。
在Linux生態(tài)系統(tǒng)中,Systemd被部如正署到了大多數(shù)的標(biāo)準(zhǔn)Linux發(fā)行版中,只有為數(shù)不多的幾個(gè)發(fā)行版尚未部署。Systemd通常是所有其它守護(hù)進(jìn)程的父進(jìn)程,但并非總是如此。Linux學(xué)習(xí)可參閱《Linux就該渣缺悔這么學(xué)》。
stemctl命令是自systemd出現(xiàn)以宏茄冊(cè)來被廣泛討論的命令。
Systemd 的很多概念來源于蘋果 Mac OS 操作系統(tǒng)上的
launchd.
systemd 引入了新的配置方式,對(duì)應(yīng)用程序的開發(fā)也有一些
新的要求。
init 系統(tǒng)的一個(gè)重要職責(zé)就是負(fù)責(zé)跟蹤和管理服務(wù)進(jìn)程的生
命周期。
systemd 則利用了 Linux 內(nèi)核的特性即 CGroup 來完成跟蹤
的任務(wù)。當(dāng)停止服務(wù)時(shí),通過查詢 CGroup,systemd 可以確納猜
保找到所有的相關(guān)進(jìn)程,從而干凈地停止服務(wù)。
CGroup 提供了類似文件系統(tǒng)的接口,使用方便。當(dāng)進(jìn)程創(chuàng)建
子進(jìn)程時(shí),子進(jìn)程會(huì)繼承父進(jìn)程的 CGroup。
因此無論服務(wù)如何啟動(dòng)新的子進(jìn)程,所有的這些相關(guān)進(jìn)程都
會(huì)屬于同一個(gè) CGroup,systemd 只需要簡(jiǎn)單地遍歷指定的蔽宏
CGroup 即可正確地找到所有的相關(guān)進(jìn)程,將它們一一停止即
可。
用systemd命令來管理Linux系統(tǒng)
systemctl status dnasq.service
systemctl reload sshd
systemctl restart dnasq
systemctl stop dnasq
systemctl start dnasq
systemctl list-units -t service
systemctl –failed
如果你想以進(jìn)程初始化所占用時(shí)間排序打印出所有正在運(yùn)行
的單元列表,那么systemd-yze命令可以幫助你完成這個(gè)
任務(wù)。
systemctl start rpcbind(如果這個(gè)服務(wù)不啟動(dòng),nfs服務(wù)
會(huì)啟動(dòng)失?。?/p>
systemctl start nfs-server
systemctl enable rpcbind;systemctl enable nfs-server
開機(jī)自啟
firewall-cmd –permanent –add-service=nfs 讓防火墻通
過NFS服務(wù)
firewall-cmd –permanent –add-service=rpc-bind 通過
rpc服務(wù)(如果不開啟,rpcinfo就不能掃描)
firewall-cmd –permanent –add-service=mountd 通過
mountd服務(wù)(如果不開啟,不能遠(yuǎn)程showmount)
firewall-cmd –reload
linux c語(yǔ)言 rpc的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux c語(yǔ)言 rpc,Linux下使用C語(yǔ)言實(shí)現(xiàn)RPC技術(shù),linux 的 systemctl指令怎么用的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。