訊息佇列的簡單實現(客戶端A,客戶端B)

2021-06-16 12:44:51 字數 1681 閱讀 7699

下面是兩個相互通訊程序的簡單實現,乙個代表客戶端a,乙個代表客戶端b

/***************************************

客戶端a

傳送typeb型別的資料到客戶端b

讀取傳送到客戶端a的typea型別的資料

***************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 64

#define typea 100

#define typeb 200

typedef structmsg;

int main()

//建立key

if ((msgid = msgget(key, 0666 | ipc_creat)) == -1) //建立訊息佇列,沒有則建立,有了則開啟,並將其id傳給msgid

if ((pid = fork()) == -1)

if (pid == 0) /*子程序從訊息佇列讀取typea型別的訊息*/

printf("rcv----%s", buf.mtext);

if (strncmp(buf.mtext, "quit", 4) == 0)

exit(0);}}

}else  /*父程序向訊息佇列傳送typeb型別的訊息*/

if (strncmp(buf.mtext, "quit", 4) == 0)}}

return 0;}

/***************************************

客戶端b

傳送typea型別的資料到客戶端a

讀取傳送到客戶端b的typeb型別的資料

***************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 64

#define typea 100

#define typeb 200

typedef structmsg;

int main()

if ((msgid = msgget(key, 0666 | ipc_creat)) == -1)

if ((pid = fork()) == -1)

if (pid == 0) /*child process receive message typea*/

printf("rcv----%s", buf.mtext);

if (strncmp(buf.mtext, "quit", 4) == 0)

exit(0);}}

}else  /*parent process send message typea*/

if (strncmp(buf.mtext, "quit", 4) == 0)}}

return 0;

}

瘦客戶端 胖客戶端 智慧型客戶端

胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...

使用tcp select實現客戶端與客戶端的通訊

使用多路復用實現客戶端與客戶端進行通訊 原理 客戶端只要一連上伺服器,立馬給伺服器傳送使用者名稱,然後在服務端將newsocketfd 存放在同乙個結構體中,客戶端先給伺服器傳送資料,然後通過伺服器 給客戶端。伺服器先會查詢對應名字的 newsocketfd 然後向該 newsocketfd 中寫入...

nats 客戶端訊息傳送

parser.parse解析訊息,通過狀態機流轉,得到是pub訊息,呼叫client.processpub處理,解析 得到subobject物件,一些合法性校驗 狀態機切換,獲取剩餘訊息內容進入client.processinboundmsg進行訊息處理 分支選擇client,跳轉進入process...