




已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄功能概述2網(wǎng)絡(luò)通信層3連接生命周期的管理3接口3異步IO緩沖內(nèi)存池3本地?cái)?shù)據(jù)與字節(jié)流數(shù)據(jù)的互相轉(zhuǎn)換4信令和通信數(shù)據(jù)結(jié)構(gòu)5偽代碼定義5命令管理7數(shù)據(jù)有效性檢測(cè)8文件傳輸通道9日志10功能概述服務(wù)器主要業(yè)務(wù)功能是連接物管和終端,為社區(qū)物管和管理中心提供管理功能,使其能夠統(tǒng)一管理終端。服務(wù)器的功能模塊包括:1. 數(shù)據(jù)管理,數(shù)據(jù)包括房屋數(shù)據(jù)、住戶(hù)數(shù)據(jù)、配租數(shù)據(jù)、門(mén)禁卡數(shù)據(jù)、終端配置數(shù)據(jù)等;2. 狀態(tài)管理,服務(wù)器需要維持物管和終端的連接,保持連接狀態(tài)的可增刪改查;3. 命令管理,物管和終端之間的交互命令有確認(rèn)機(jī)制,命令通過(guò)服務(wù)器傳遞,服務(wù)器需要保證命令傳遞的可靠性;4. 數(shù)據(jù)有效性檢測(cè),服務(wù)器需要定期檢測(cè)一些數(shù)據(jù)的有效性,包括配租數(shù)據(jù)是否(臨近)到期、門(mén)禁卡白名單數(shù)據(jù)與終端定期交換等;5. 文件傳輸通道,包括軟件版本升級(jí)、數(shù)據(jù)文件傳輸?shù)龋?. 日志。網(wǎng)絡(luò)通信層通信層負(fù)責(zé)業(yè)務(wù)命令和數(shù)據(jù)的發(fā)送接收。由于物管、終端和服務(wù)器之間命令和數(shù)據(jù)需要精確送達(dá),所有業(yè)務(wù)都采用TCP來(lái)實(shí)現(xiàn)。IOCP模型是Windows服務(wù)器開(kāi)發(fā)中性能最好的非阻塞異步IO模型,所以通信層采用IOCP模型構(gòu)建。Windows下有五種非阻塞I/O模型:選擇(Select)、異步選擇(WSAAsyncSelect)、事件選擇(WSAEventSelect)、重疊I/O(Overlapped I/O)和完成端口(Completion Port)。Select是同步IO模型,同時(shí)處理的任務(wù)有限(上限1024),不符合處理成千上萬(wàn)連接的要求;WSAAsyncSelect也是同步IO模型,以接收Windows消息為基礎(chǔ),不符合服務(wù)器控制臺(tái)程序要求;WSAEventSelect也是同步IO模型,需要?jiǎng)?chuàng)建與連接數(shù)等同的事件內(nèi)核對(duì)象,資源未能高效利用,也排除在外;上面三種IO模型其實(shí)是一回事,都是類(lèi)select模型,適合開(kāi)發(fā)小型服務(wù)器或者客戶(hù)端程序,而不適合需要接受成千上萬(wàn)連接的服務(wù)器程序。Overlapped I/O是異步IO模型,但是它需要程序員關(guān)心線(xiàn)程池的實(shí)現(xiàn)和調(diào)度(類(lèi)似Linux下面的epoll模型,但是epoll是同步IO模型);而IOCP克服了上面四種模型的缺點(diǎn),對(duì)實(shí)現(xiàn)大連接數(shù)的服務(wù)器有可靠的性能和較少的資源占用,而且伸縮性比較強(qiáng),占用資源數(shù)跟連接數(shù)量相關(guān),甚至可以用在客戶(hù)端程序上面。連接生命周期的管理C+語(yǔ)言沒(méi)有對(duì)象回收(GC)機(jī)制,生命周期的管理和防止內(nèi)存泄露需要程序自己實(shí)現(xiàn),而一條連接從產(chǎn)生后到銷(xiāo)毀的過(guò)程中會(huì)有多個(gè)線(xiàn)程同時(shí)對(duì)其進(jìn)行操作,同時(shí)讀寫(xiě)甚至同時(shí)關(guān)閉,對(duì)象的多線(xiàn)程同步也需要程序?qū)崿F(xiàn)。這里采用智能指針(shared_ptr, stl_c+11)來(lái)管理連接的生命周期,通信層維護(hù)各個(gè)連接在內(nèi)存中唯一一份數(shù)據(jù),同時(shí)提供引用計(jì)數(shù),統(tǒng)計(jì)當(dāng)前該數(shù)據(jù)被外界使用情況,當(dāng)外界沒(méi)有角色再需要該數(shù)據(jù)時(shí)(引用計(jì)數(shù)減到0),通信層會(huì)刪除這份數(shù)據(jù),同時(shí)表明該連接生命周期終止。接口數(shù)據(jù)接口采用handle/body手法,連接的handle采用整形數(shù)據(jù),body采用C+對(duì)象封裝連接數(shù)據(jù),數(shù)據(jù)包含SOCKET句柄、連接狀態(tài)和當(dāng)前接收緩存(業(yè)務(wù)層)等。連接生命周期反映到handle上表現(xiàn)為該handle是否為有效。發(fā)送內(nèi)存采用智能指針(unique_ptr, stl_c+11)進(jìn)行傳遞,這里用到了智能指針對(duì)數(shù)據(jù)和數(shù)據(jù)析構(gòu)的封裝,發(fā)送完成之后直接調(diào)用其刪除器(deleter)進(jìn)行內(nèi)存的刪除,這樣上下層之間就避免了一次內(nèi)存拷貝。回調(diào)接口為C+接口(純虛函數(shù))。異步IO緩沖內(nèi)存池由于系統(tǒng)層和stl層容器都實(shí)現(xiàn)了小內(nèi)存內(nèi)存池,所以程序?qū)⒉辉賹?shí)現(xiàn)自己的內(nèi)存池,發(fā)送緩沖內(nèi)存完全動(dòng)態(tài)分配,接收緩沖內(nèi)存每個(gè)連接有一份,也通過(guò)動(dòng)態(tài)分配而來(lái)。本地?cái)?shù)據(jù)與字節(jié)流數(shù)據(jù)的互相轉(zhuǎn)換本地?cái)?shù)據(jù)轉(zhuǎn)換為字節(jié)流數(shù)據(jù)時(shí),根據(jù)本地?cái)?shù)據(jù)大小構(gòu)造字節(jié)流對(duì)象,然后將本地?cái)?shù)據(jù)逐字節(jié)填入流中,可變數(shù)組先填入數(shù)組大小再逐個(gè)填充數(shù)組內(nèi)容。字節(jié)流數(shù)據(jù)轉(zhuǎn)換為本地?cái)?shù)據(jù)時(shí),根據(jù)字節(jié)流中標(biāo)識(shí)的大小動(dòng)態(tài)構(gòu)造本地?cái)?shù)據(jù),構(gòu)造時(shí)使用智能指針(unique_ptr, stl_c+11)管理數(shù)據(jù),加上C+多態(tài)特性,可以大大簡(jiǎn)化內(nèi)存的管理。信令和通信數(shù)據(jù)結(jié)構(gòu)信令設(shè)計(jì)的原則是方便數(shù)據(jù)分析,即通過(guò)抓包工具得到數(shù)據(jù)后能夠方便地定位到信令所屬業(yè)務(wù)類(lèi)型。通信數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)原則是數(shù)據(jù)之間相互獨(dú)立,減少耦合,但是又方便擴(kuò)展,而且方便與本地?cái)?shù)據(jù)之間的轉(zhuǎn)換。由于交互三方(服務(wù)器、終端、物管)采用三種不同的語(yǔ)言來(lái)實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu)的定義必然各有不同,所幸三方都是面向?qū)ο笳Z(yǔ)言,因此可以使用C+定義作為其他兩方的偽代碼來(lái)參考。數(shù)據(jù)結(jié)構(gòu)統(tǒng)一處于同一包頭定義下,即都繼承自同一個(gè)包頭基類(lèi)。偽代碼定義class DemoPacket : public PacketHead public: DemoPacket() : PacketHead(0, kPacketTypeDemo, 0) DemoPacket(const PacketHead& head) : PacketHead(head) virtual DemoPacket() override virtual bool Read(PacketReadStream& stream) override if (stream.Read(a_) & stream.Read(b_) & c_.Read(stream) & d_.Read(stream) return true; return false; virtual bool Write(PacketWriteStream& stream) override if (PacketHead:Write(stream) & stream.Write(a_) & stream.Write(b_) & c_.Write(stream) & d_.Write(stream) return true; return false; virtual int CalculateSize() override auto total_size = 0; total_size += PacketHead:CalculateSize(); total_size += sizeof(a_); total_size += sizeof(b_); total_size += c_.CalculateSize(); total_size += d_.CalculateSize(); return total_size; public: BYTE4 a_;/ 四字節(jié)整型字段 BYTE4 b_;/ 四字節(jié)整型字段 PacketArrayBYTE1 c_;/ 字符串字段 PacketArray d_;/ 可變數(shù)組字段,Obj是一個(gè)(任意)類(lèi);其中BYTE4、PacketArrayBYTE1、PacketArray都是類(lèi)型名,具體定義不表。命令管理命令需要精確送達(dá),因此必須將命令放入隊(duì)列中,待到已經(jīng)精確送達(dá)才能移出。隊(duì)列需要實(shí)現(xiàn)等待機(jī)制,因此在每個(gè)命令包中加入該命令的序號(hào),對(duì)方在確認(rèn)回包時(shí)將此序號(hào)一同返回,收到此確認(rèn)包后根據(jù)序號(hào)找到隊(duì)列中未完成的命令,將其移出。由于此隊(duì)列只存在于內(nèi)存中,服務(wù)器只能保證該隊(duì)列中的命令能夠精確送達(dá),一旦程序關(guān)閉,該隊(duì)列也會(huì)隨之消失,因此其他兩方(物管和終端)也需要加入同步或者異步確認(rèn)機(jī)制,如果接收確認(rèn)命令超時(shí),因當(dāng)重發(fā),但是命令序號(hào)保持和之前的一致,但是服務(wù)器不保證轉(zhuǎn)發(fā)后的命令序號(hào)的一致性,即如果物管發(fā)起一個(gè)序號(hào)為0x的命令,服務(wù)器轉(zhuǎn)發(fā)此命令給終端時(shí)序號(hào)可能為0x,但是終端給服務(wù)器確認(rèn)包的序號(hào)必須是0x,而服務(wù)器給物管的確認(rèn)回包的序號(hào)必須是0x。暫時(shí)不考慮同時(shí)命令數(shù)量超過(guò)整型(4字節(jié))(個(gè))范圍的情況。命令移出后內(nèi)存中不可尋,但是會(huì)記錄日志。該隊(duì)列使用stl標(biāo)準(zhǔn)容器map來(lái)實(shí)現(xiàn)。數(shù)據(jù)有效性檢測(cè)有效性檢測(cè)即定時(shí)輪詢(xún)數(shù)據(jù),查看是否有數(shù)據(jù)達(dá)到了需要告知物管或者終端的地步,然后發(fā)送命令告知。效率是這個(gè)模塊最需要考慮的問(wèn)題,因此可以將需要檢測(cè)的數(shù)據(jù)全部放入內(nèi)存中進(jìn)行操作。文件傳輸通道網(wǎng)絡(luò)傳輸層搭建完成之后,文件傳輸通道可以輕松的完成。由于IP層有包頭校驗(yàn),TCP層有包頭加數(shù)據(jù)的校驗(yàn),以上兩層檢驗(yàn)算法都是16bit字的二進(jìn)制反碼和(把需校驗(yàn)的數(shù)據(jù)看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)制反碼求和),網(wǎng)絡(luò)通信層也有包內(nèi)容校驗(yàn),理論上文件數(shù)據(jù)是能保證其完整性的,只需要加一層文件MD5校驗(yàn)即可。文件傳輸由于數(shù)據(jù)量大,占用帶寬也大,所以應(yīng)當(dāng)做適度的限速。日志日志分為命令日志和運(yùn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度七年級(jí)政治下冊(cè)全冊(cè)基礎(chǔ)知識(shí)點(diǎn)期末復(fù)習(xí)提綱
- 會(huì)計(jì)的筆試題目及答案
- 教師教育教學(xué)反思與落地措施試題及答案
- 廢舊電子產(chǎn)品回收2025年行業(yè)現(xiàn)狀與未來(lái)發(fā)展趨勢(shì)報(bào)告
- 2025汽車(chē)工程知識(shí)測(cè)試題及答案
- 直播平臺(tái)內(nèi)容監(jiān)管2025:自律發(fā)展路徑與監(jiān)管策略研究報(bào)告
- 百貨商場(chǎng)數(shù)字化會(huì)員體系構(gòu)建與忠誠(chéng)度提升研究報(bào)告
- 供應(yīng)鏈金融助力中小微企業(yè)融資的2025年創(chuàng)新路徑與模式研究報(bào)告
- 現(xiàn)代家具設(shè)計(jì)趨勢(shì)對(duì)消費(fèi)者行為的影響探討試題及答案
- 新能源汽車(chē)跨界發(fā)展研究試題及答案
- GA 1812.2-2024銀行系統(tǒng)反恐怖防范要求第2部分:數(shù)據(jù)中心
- 2025至2030中國(guó)智慧消防行業(yè)發(fā)展?fàn)顩r及未來(lái)前景研究報(bào)告
- 聯(lián)鎖系統(tǒng)設(shè)備調(diào)試施工作業(yè)指導(dǎo)書(shū)
- 熱網(wǎng)工程施工組織設(shè)計(jì)方案
- 2025年重慶市中考物理模擬試卷(一)(含解析)
- 髕骨骨折的中醫(yī)護(hù)理查房
- 希爾頓管理制度
- 2022繼電保護(hù)微機(jī)型試驗(yàn)裝置技術(shù)條件
- 2025年浙江寧波交通工程建設(shè)集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 消毒供應(yīng)中心管理制度
- 2024年陜西高中學(xué)業(yè)水平合格性考試生物試卷真題(含答案)
評(píng)論
0/150
提交評(píng)論