11、即時(shí)聊天程序設(shè)計(jì)_第1頁(yè)
11、即時(shí)聊天程序設(shè)計(jì)_第2頁(yè)
11、即時(shí)聊天程序設(shè)計(jì)_第3頁(yè)
11、即時(shí)聊天程序設(shè)計(jì)_第4頁(yè)
11、即時(shí)聊天程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第十一章基于Linux即時(shí)聊天程序設(shè)計(jì)(練習(xí)題,僅供參考)主講人:歐忠良本章目標(biāo)作為L(zhǎng)inux高級(jí)階段一個(gè)練習(xí),讓學(xué)員從實(shí)踐中掌握課程知識(shí)點(diǎn)。實(shí)現(xiàn)即時(shí)聊天工具的設(shè)計(jì)思路群聊的設(shè)計(jì)思路私聊的設(shè)計(jì)思路文件傳輸?shù)膶?shí)現(xiàn)思路安全的共享內(nèi)存管理方案功能需求技術(shù)平臺(tái):運(yùn)行平臺(tái):Linux開(kāi)發(fā)工具:vi/gcc/gdb/makefile軟件功能客戶端登陸群聊私聊文件傳輸*技術(shù)知識(shí)點(diǎn)準(zhǔn)備掌握Linux編程工具gcc/gdb/makefile掌握Linux多進(jìn)程技術(shù)的使用掌握在System V下的IPC技術(shù):信號(hào)、消息隊(duì)列、共享內(nèi)存等等掌握Linux下TCP SOCKET 編程技術(shù)程序框架客戶端說(shuō)明tty進(jìn)程從控

2、制終端獲取用戶的輸入,并以管道的形式傳遞給socket io進(jìn)程進(jìn)行發(fā)送Socket IO進(jìn)程負(fù)責(zé)讀入管道數(shù)據(jù)即得到用戶的輸入,并通過(guò)socket按照自定義協(xié)議發(fā)送。負(fù)責(zé)讀取socket,并分析和處理數(shù)據(jù)包,并顯示。當(dāng)發(fā)現(xiàn)網(wǎng)絡(luò)中斷的情況下,發(fā)送信號(hào)給tty進(jìn)程,讓其退出。服務(wù)器端說(shuō)明(1)監(jiān)聽(tīng)進(jìn)程以IO復(fù)用模型,創(chuàng)建服務(wù)器監(jiān)聽(tīng),等待客戶端連入;當(dāng)接收到客戶端的連接請(qǐng)求后,添加客戶信息clientinfo到共享內(nèi)存區(qū),并fork一個(gè)socket io進(jìn)程負(fù)責(zé)數(shù)據(jù)端口的讀寫(xiě)Socket IO進(jìn)程負(fù)責(zé)從socket中讀取數(shù)據(jù)包,并送到接收緩沖隊(duì)列中mqRecv(其中消息結(jié)構(gòu)messageType=g

3、etpid())負(fù)責(zé)從mqSend緩沖消息隊(duì)列中,讀取messagetype=getpid()的消息數(shù)據(jù),并將數(shù)據(jù)包發(fā)送出去。服務(wù)器說(shuō)明(2)接收緩沖由消息隊(duì)列實(shí)現(xiàn),SOCKET IO進(jìn)程讀取到數(shù)據(jù)都送入這個(gè)隊(duì)列,處理進(jìn)程從該隊(duì)列中讀取數(shù)據(jù)包進(jìn)行相應(yīng)處理發(fā)送緩沖由消息隊(duì)列實(shí)現(xiàn),處理進(jìn)程處理后要發(fā)送給各客戶端數(shù)據(jù)都送入這個(gè)隊(duì)列,SOCKET IO進(jìn)程從該隊(duì)列中讀取數(shù)據(jù)包按照自定義協(xié)議發(fā)送出去處理進(jìn)程根據(jù)包類型,進(jìn)行相關(guān)的處理客戶信息列表以共享內(nèi)存實(shí)現(xiàn),詳見(jiàn)共享內(nèi)存管理方案和信息結(jié)構(gòu)自定義協(xié)議/數(shù)據(jù)包格式typedef struct data_packet unsigned char ucPack

4、Type; /0:群聊 1:私聊 2:登陸 3:在線列表包c(diǎn)har acLoginName10;/送出數(shù)據(jù)包的客戶端登錄名char acDstName10;/數(shù)據(jù)包送達(dá)的客戶端名char acData80;/聊天數(shù)據(jù)DATAPACKHEAD;/數(shù)據(jù)包說(shuō)明,當(dāng)ucPackType如下時(shí):0:acDstName為空1:acDstName,acLoginName不能為空2: acDstName,acLoginName為空,acData為登錄名3: 服務(wù)器端的應(yīng)答包,acDstName,acLoginName為空acData的格式:loginname1;loginname2;接收/發(fā)送緩沖消息結(jié)構(gòu)ty

5、pedef struct mymessageunsigned long int nMessageType;DATAPACK stDP;說(shuō)明: 被送進(jìn)發(fā)送緩沖的消息:nMessageType等于socket io進(jìn)程ID,以便各個(gè)socket io進(jìn)程從發(fā)送緩沖中得到各自要發(fā)送的數(shù)據(jù)客戶端信息結(jié)構(gòu)數(shù)據(jù)struct stClientInfopid_t nClientPid;/負(fù)責(zé)讀寫(xiě)端口的進(jìn)程 char acLoginName30;/客戶端的登錄名共享內(nèi)存管理方案Stack方案先進(jìn)后出位圖索引bitmap方案第一塊內(nèi)存塊作為索引塊索引塊中每一位代表相應(yīng)位置內(nèi)存塊的狀態(tài):“1”表示在用,“0”表示空

6、閑Hash管理方案詳細(xì)介紹注意:多進(jìn)程訪問(wèn)同步Hash管理方案struct stShmBlockint nBlockId; /塊編號(hào)void * pvBlockBp; /塊基址int nBlockSize; /塊大小sem_t semId; /控制該block的信號(hào)量unsigned char status; /該block的狀態(tài)void *apBlockMAX_SIZE共享內(nèi)存管理封裝(1)int SHM_create(int nMemSize);功能:向Linux內(nèi)核申請(qǐng)一片共享內(nèi)存區(qū)參數(shù):nMemSize共享內(nèi)存大小返回值:0表示成功,且返回semid;0:寫(xiě)入成功的字節(jié)數(shù);-1:寫(xiě)入失

7、敗共享內(nèi)存管理封裝(2)int SHM_read(shm_t shmid,void *pvUserData,int nDataLen);功能:從共享內(nèi)存中讀取一塊數(shù)據(jù)到用戶空間來(lái)參數(shù):shmid共享內(nèi)存塊; pvUserData用來(lái)存放數(shù)據(jù)的區(qū)域; nDataLen讀取長(zhǎng)度返回值:0:讀取的字節(jié)數(shù);0:失敗void SHM_destroy(shm_t shmid);功能:釋放共享內(nèi)存區(qū)參數(shù):shmid共享內(nèi)存塊返回值:無(wú)登陸流程群聊流程設(shè)計(jì)私聊設(shè)計(jì)流程大并發(fā)網(wǎng)絡(luò)通信程序高并發(fā)解決方案高負(fù)載時(shí)性能解決方案系統(tǒng)穩(wěn)定性數(shù)據(jù)安全性交易可靠性高并發(fā)/接入1、借助Linux2.6內(nèi)核實(shí)現(xiàn)的框架Epoll等

8、2、通過(guò)多進(jìn)程技術(shù)突破Linux單進(jìn)程內(nèi)1024個(gè)文件描述符的限制高負(fù)載/性能良好的程序框架進(jìn)程改成線程來(lái)處理socket io線程可以根據(jù)并發(fā)io情況,啟動(dòng)相應(yīng)數(shù)量的IO線程來(lái)讀寫(xiě)處理線程可以根據(jù)接收緩沖的未處理數(shù),來(lái)啟動(dòng)相應(yīng)數(shù)量的處理線程來(lái)處理引入線程池的機(jī)制引入高性能的內(nèi)存管理方案重新封裝SOCKET,成庫(kù)后以便于后面項(xiàng)目使用數(shù)據(jù)安全網(wǎng)絡(luò)安全存儲(chǔ)安全傳輸安全將目前固定長(zhǎng)度包改成可變長(zhǎng)度數(shù)據(jù)包結(jié)構(gòu),引入包頭包體機(jī)制,節(jié)約網(wǎng)絡(luò)帶寬使用加入數(shù)據(jù)包驗(yàn)證或關(guān)鍵字段加密的機(jī)制交易可靠性交易時(shí)要保證一應(yīng)一答(有請(qǐng)求必有應(yīng)答),應(yīng)考慮如下的情況: T發(fā)送成功,但S未收到T發(fā)送成功,S收到,但E超時(shí)或未返回T發(fā)送成功,S收到,交易返回,但此時(shí)線路中斷T發(fā)送成功,S收到,交易返回,應(yīng)答成功,但T未收到.還需考慮的異

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論