


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄功能概述錯(cuò)誤!未定義書(shū)簽。網(wǎng)絡(luò)通信層錯(cuò)誤!未定義書(shū)簽。連接生命周期的管理錯(cuò)誤!未定義書(shū)簽。接口 錯(cuò)誤!未定義書(shū)簽。異步10緩沖內(nèi)存池 錯(cuò)誤!未定義書(shū)簽。本地?cái)?shù)據(jù)與字節(jié)流數(shù)據(jù)的互相轉(zhuǎn)換 錯(cuò)誤!未定義書(shū)簽。信令和通信數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤!未定義書(shū)簽。偽代碼定義錯(cuò)誤!未定義書(shū)簽。命令管理錯(cuò)誤!未定義書(shū)簽。數(shù)據(jù)有效性檢測(cè)錯(cuò)誤!未定義書(shū)簽。文件傳輸通道錯(cuò)誤!未定義書(shū)簽。日志 錯(cuò)誤!未定義書(shū)簽。功能概述服務(wù)器主要業(yè)務(wù)功能是連接物管和終端,為社區(qū)物管和管理中心提供管理功能,使其能夠統(tǒng)一管理終端。服務(wù)器的功能模塊包括:1. 數(shù)據(jù)管理,數(shù)據(jù)包括房屋數(shù)據(jù)、住戶數(shù)據(jù)、配租數(shù)據(jù)、門禁卡數(shù)據(jù)、終端配置數(shù)據(jù) 等;2. 狀態(tài)管
2、理,服務(wù)器需要維持物管和終端的連接,保持連接狀態(tài)的可增刪改查;3. 命令管理,物管和終端之間的交互命令有確認(rèn)機(jī)制,命令通過(guò)服務(wù)器傳遞, 服務(wù)器需要保證命令傳遞的可靠性;4. 數(shù)據(jù)有效性檢測(cè),服務(wù)器需要定期檢測(cè)一些數(shù)據(jù)的有效性,包括配租數(shù)據(jù)是否(臨近)到期、門禁卡白名單數(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ā)中性能最好的非阻塞異步10模型,所以通信層采用IOCP模型構(gòu)建。Windows下
3、有五種非阻塞I/O模型:選擇(Select)、異步選擇(WSAAsyncSelect)、 事件選擇(WSAEventSelec)、重疊 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ì)象,資源未能高效利用,也排除在外;上面三種10模型其實(shí)是一回事,都是類 select模型,適
4、合開(kāi)發(fā)小型服務(wù)器或者客戶端程序, 而不適合需要接受成千上萬(wàn)連接的服務(wù)器程序。Overlapped I/O是異步10模型,但是它需要程序員關(guān)心線程池的實(shí)現(xiàn)和調(diào)度(類似Linux下面的epoll模型,但是epoll是同步10模型);而IOCP克服了上面四種模型的缺點(diǎn), 對(duì)實(shí)現(xiàn)大連接數(shù)的服務(wù)器 有可靠的性能和較少的資源占用, 而且伸縮性比較強(qiáng), 占用資源數(shù)跟連接數(shù)量相關(guān), 甚至可 以用在客戶端程序上面。連接生命周期的管理C+語(yǔ)言沒(méi)有對(duì)象回收(GC)機(jī)制,生命周期的管理和防止內(nèi)存泄露需要程序自己實(shí)現(xiàn), 而一條連接從產(chǎn)生后到銷毀的過(guò)程中會(huì)有多個(gè)線程同時(shí)對(duì)其進(jìn)行操作,同時(shí)讀寫(xiě)甚至同時(shí)關(guān)閉,對(duì)象的多線程同步
5、也需要程序?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
6、+11)進(jìn)行傳遞,這里用到了智能指針對(duì)數(shù)據(jù)和數(shù)據(jù)析構(gòu)的封裝,發(fā)送完成之后直接調(diào) 用其刪除器(deleter )進(jìn)行內(nèi)存的刪除,這樣上下層之間就避免了一次內(nèi)存拷貝。回調(diào)接口為C+接口(純虛函數(shù))。異步 I0 緩沖內(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)
7、造本地?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ù)類型。通信數(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è)包頭基類。偽代碼定義class DemoPac
8、ket : 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) &
9、amp;& 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
10、() override auto total_size = 0;total_size += PacketHead:CalculateSize();total_size += sizeof(a_);total_size += sizeof(b_); total_size += c_.CalculateSize();return total_size;public:BYTE4 a_;BYTE4 b_;PacketArrayBYTE1 c_;PacketArray<Obj> d_;total_size += d_.CalculateSize();/四字節(jié)整型字段/四字節(jié)整型字段/字符串字
11、段/可變數(shù)組字段,Obj是一個(gè)(任意)類;其中BYTE4 PacketArrayBYTE1 PacketArray<Obj>都是類型名,具體定義不表。命令管理命令需要精確送達(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)保持和
12、之前的一致,但是服務(wù)器不保證轉(zhuǎn)發(fā)后的命令序號(hào)的一致性,即如果物管發(fā)起一個(gè)序號(hào)為0x00000001的命令,服務(wù)器轉(zhuǎn)發(fā)此命令給終端時(shí)序號(hào)可能為0x00000101,但是終端給服務(wù)器確認(rèn)包的序號(hào)必須是0x00000101,而服務(wù)器給物管的確認(rèn)回包的序號(hào)必須是0x00000001。暫時(shí)不考慮同時(shí)命令數(shù)量超過(guò)整型(4字節(jié))(95個(gè))范圍的情況。命令移出后內(nèi)存中不可尋,但是會(huì)記錄日志。該隊(duì)列使用stl標(biāo)準(zhǔn)容器map來(lái)實(shí)現(xiàn)。數(shù)據(jù)有效性檢測(cè)有效性檢測(cè)即定時(shí)輪詢數(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)做適度的限速。日志日志分為命令日志
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 糕點(diǎn)店財(cái)務(wù)管理與風(fēng)險(xiǎn)防范考核試卷
- 數(shù)據(jù)庫(kù)應(yīng)用操作技巧分享試題及答案
- 計(jì)算機(jī)四級(jí)考試小貼士試題及答案分享
- 行政組織中的創(chuàng)新思維與解決問(wèn)題策略試題及答案
- 公司會(huì)所食堂管理制度
- 公路工程團(tuán)隊(duì)建設(shè)試題及答案
- 嵌入式系統(tǒng)中的數(shù)據(jù)通信技術(shù)試題及答案
- 展會(huì)公共人員管理制度
- 勞務(wù)公司分包管理制度
- 醫(yī)院新進(jìn)職工管理制度
- 2024京東代運(yùn)營(yíng)服務(wù)合同范本
- 審計(jì)質(zhì)量影響因素的實(shí)證分析
- 山東省青島市即墨市2024年中考適應(yīng)性考試數(shù)學(xué)試題含解析
- 海上風(fēng)電柔性直流輸電系統(tǒng)先進(jìn)控制技術(shù)分析報(bào)告
- MOOC 大學(xué)物理-力學(xué)、電磁學(xué)-重慶大學(xué) 中國(guó)大學(xué)慕課答案
- 廢舊物資合同
- 三年級(jí)語(yǔ)文下冊(cè) 期末綜合模擬測(cè)試卷(人教浙江版)
- 好老師是民族的希望
- 構(gòu)建自媒體內(nèi)容生產(chǎn)與運(yùn)營(yíng)流程
- 《衛(wèi)生經(jīng)濟(jì)學(xué)》課件
- 《安全事故管理》課件
評(píng)論
0/150
提交評(píng)論