分布式網(wǎng)絡(luò)中的推送系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
分布式網(wǎng)絡(luò)中的推送系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
分布式網(wǎng)絡(luò)中的推送系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
分布式網(wǎng)絡(luò)中的推送系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
分布式網(wǎng)絡(luò)中的推送系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本科生畢業(yè)論文題 目:分如式網(wǎng)絡(luò)中的推送系統(tǒng)的設(shè)計與實現(xiàn)院 系:軟件學(xué)院專 業(yè):軟件丁程(計算機(jī)應(yīng)用方向)學(xué)生姓名:學(xué) 號指導(dǎo)教師:(職稱)隨著互聯(lián)網(wǎng)計算機(jī)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)己經(jīng)成了大眾生活必不可少的部分, 它的最大優(yōu)點就是可以將大量的信息互相共享。不管是移動終端還是個人電腦,人們 總是可以通過設(shè)備進(jìn)入互聯(lián)網(wǎng)中獲得自己感興趣的信息。但與此同時,由于互聯(lián)網(wǎng)是屬于大家的,具有很強(qiáng)的開放性,使得網(wǎng)絡(luò)上的信 息每天都在呈爆炸式地增長,信息的泛濫而引起網(wǎng)民難以消化的現(xiàn)象已經(jīng)不再是新鮮 事。在當(dāng)今這個步伐急促的社會屮,要想通過普通瀏覽的方式在信息海洋小找到自己 所需要的內(nèi)容確實不是一件輕松的事,普通的瀏

2、覽查找在當(dāng)今己經(jīng)可以說得上是一種 既消耗精力又浪費吋間的信息獲取方式,在注重用戶體驗的今天,它已經(jīng)很難達(dá)用戶 滿意程度。為了給各位網(wǎng)民帶來具有針對性的個性化服務(wù),將方便快捷的體驗帶給網(wǎng)民, 信息推送技術(shù)(push)應(yīng)運而生。有了 push技術(shù),用戶再也不用手動地在互聯(lián)網(wǎng) 上查找自c想要的信息,而只需設(shè)置訂閱自己所感興趣的內(nèi)容,push系統(tǒng)就會定期 地向用戶推送相關(guān)消息,整個過程中用戶處于被動狀態(tài),省去了手動查找等繁朵步驟, 大大提高了用戶的體驗質(zhì)量。因此,推送技術(shù)已經(jīng)在近些年中得到了巨大的發(fā)展和推廣,尤其是在當(dāng)今分布 式主流的網(wǎng)絡(luò)屮,一個好的推送系統(tǒng)會給成千上萬的用戶帶來便利,也給了各個消息

3、發(fā)送方帶來了推廣渠道。通過推送系統(tǒng),各個組織可以把自己的新聞消息推送到特定 用戶的設(shè)備中,形成了定向傳送的局面,雙方的需求都得到了滿足,并h還有了效率 的保證。關(guān)鍵詞:信息獲取,推送技術(shù),個性化abstractwith the rapid development of the technology in internet and computer field, network has become the indispensable part of the public life. its most important advantage is the capacity of sharing

4、lots of message. w讓h mobile terminal or pc, people can easily connect to the internet to get the message he/she like.but in the same time, since the internet belongs to ourselves, it is so open that the messages in internet are increasing rapidly everyday it is no more a news that netizen can not di

5、gest soon because of the message overflow. in this hurried society, it is not an easy thing to find the message we want in the data ocean by ordinary browsing. nowaday the ordinary browsing way is time-wasted and vigor-wasted to get message. from point view of paying attention to customer experience

6、, it can hardly make the customer satisfied.to give the netizen individual service and convenient experience, the message push technology occurs. with the push technology, customers no more need to find the message manually. they just need to setup the content they interest in, and the push system w

7、ill push the relevant message to the customer. the customers are in passive state all the time without the manual checking, and the customer experience is enhancing largely.so the push technology has been popularized and developed largely these years, especially in the distributed network. an excell

8、ent push system can bring convenience to customers and provide more spread way to the pushers- with the push system, an organization can send their news to the specific customers. it satisfy the pushers and recievers in the same time and guarantee the efficiency.keywords: obtain message, push techno

9、logy, individuation第一章前言1l1背景現(xiàn)狀分析11.2推送系統(tǒng)概述21.3論文結(jié)構(gòu)簡介3笫二章技術(shù)與原理42推送基木原理42.2 push技術(shù)優(yōu)缺點分析52.3 java網(wǎng)絡(luò)編程62.4 java數(shù)據(jù)庫編程11241 jdbc 簡介112.4.2 java數(shù)據(jù)庫操作122.5 xmpp協(xié)議介紹17第三章架構(gòu)設(shè)計193系統(tǒng)架構(gòu)及原理193.2業(yè)務(wù)用例的實現(xiàn)203.3數(shù)據(jù)庫設(shè)計223.3.1構(gòu)建數(shù)據(jù)庫的系統(tǒng)流程223.3.2表的貝體設(shè)計24第四章模塊設(shè)計284.1 connectionpool 類介紹284.2 cache 類介紹384.3 onlinemanager 類介紹4

10、34.4 logei類介紹48第五章部署應(yīng)用525運行環(huán)境525.2使用說明53第六章結(jié)論576工作總結(jié)576.2工作展望58致謝59參考文獻(xiàn)60第一章前言1.1背景現(xiàn)狀分析pull與push技術(shù)對用戶來說都是信息獲取方式,但卻是兩種截然相反的信 息獲取技術(shù)。pull為信息拉取技術(shù),在信息獲取時,用戶必須時時處于主動地位, 并冃參與信息獲取整個過程;push技術(shù)為信息推送技術(shù),服務(wù)器處丁主動地位, 用戶處于被動地位。通常情況下,人們都是采用“pull”方式從網(wǎng)絡(luò)上“拉取”信息,即利用搜 索引擎來獲取信息的方式。隨著網(wǎng)絡(luò)上信息資源的日益豐富,基于pull技術(shù)的 信息獲取技術(shù)無論在信息的搜索速度、

11、傳輸速度,還是搜索信息的質(zhì)量上都越來 越難以令人滿意。這是由于pull技術(shù)自身存在的不足造成的。一是以pull方式 獲取信息不僅時間長,而且費用高。pull技術(shù)是通過url來進(jìn)行信息資源定位 的。人們上網(wǎng)獲取信息時,必須首先利用各種搜索引擎去查找各個服務(wù)器在網(wǎng)上 的url,然后再通過url去訪問該服務(wù)器,定位、瀏覽、選擇自己所需的信息 資源。這樣人們查詢一次信息,必須長時間地頻繁登錄多個服務(wù)器,i大i而不僅時 間長,而冃費用高。二是信息效率低,資源浪費嚴(yán)重。從網(wǎng)絡(luò)技術(shù)上講,pull技 術(shù)是一種點到點的傳輸方式,當(dāng)多個用戶需要一條信息時,該信息就必須重復(fù)傳 輸多次,因此嚴(yán)重地浪費了網(wǎng)絡(luò)帶寬和服務(wù)

12、器資源。三是服務(wù)器被動服務(wù),用戶 獲取信息及時性差。pull方式獲取信息時,用戶是主動的,服務(wù)器和信息是被動 的,也就是說,用戶必須主動到服務(wù)器上尋找信息,這就是人們通常所說的“人 找信息”。另外,這種方式客戶機(jī)和服務(wù)器必須保持實時的連接才能獲取信息。 但由于網(wǎng)絡(luò)信息更新快,這就要求用戶必須經(jīng)常上網(wǎng)查看信息,否則很難及時獲 得自c所需的最新信息。簡單地說,internet發(fā)展到今天的規(guī)模,網(wǎng)上具有海量信息,這種依靠被動 “拉取”信息的服務(wù)方式,在時間延遲、查全率、查準(zhǔn)率、響應(yīng)時間等方面都不 能滿足用戶的需求,可以說,以pull技術(shù)為代表的信息獲取模式已成為信息共 享的瓶頸。pull與push技

13、術(shù)對用戶來說都是信息獲取技術(shù),但二者存在著根本的不同。 以pull技術(shù)為核心的信息拉取技術(shù),在信息獲取時,用戶必須時時處于主動地 位,也就是說,用戶必須參與信息獲取的整個過程。而以push技術(shù)為核心的信 息推送技術(shù),在信息推送過程屮,服務(wù)器始終處于主動地位,用戶卻處于被動地 位。與pull技術(shù)相比,push技術(shù)不僅獲取信息的效率高,費用低,而且及時性 強(qiáng),因而它一出現(xiàn)便受到人們的青睞。push技術(shù)能夠通過一定的技術(shù)標(biāo)準(zhǔn)或協(xié) 議,把用戶感興趣的信息,按照用戶的要求及吋、主動地推送給用戶。用戶收到 信息后,還可以離線瀏覽。信息推送技術(shù)將深刻地改變網(wǎng)絡(luò)信息的傳播方式,使 用戶不必“大海撈針”式地搜集

14、信息,而由服務(wù)器主動、及時地把用戶感興趣的 信息推送給用戶,用戶可以“以逸待勞”地坐等信息到來。1.2推送系統(tǒng)概述隨著互聯(lián)網(wǎng)越來越深入人心,網(wǎng)絡(luò)容量和瀏覽人數(shù)都以驚人的速度增長著。 當(dāng)人們上網(wǎng)瀏覽資訊,而臨著數(shù)以百萬計的網(wǎng)頁,他們就更需要一種簡便快速的 方法找到他們所需要的信息內(nèi)容。毫無疑問,推送系統(tǒng)將是一個很好的選擇,通 過這類系統(tǒng),用戶可以全面、及時、準(zhǔn)確的獲得個人感興趣的內(nèi)容。我們來打個比方,推送系統(tǒng)好比一個傳遞信息中間者,它的一邊是發(fā)布方, 一邊是接受方,一旦發(fā)布方有了新的推送消息,它就立即將信息傳遞到特定的接 收方當(dāng)屮,將原來復(fù)雜繁瑣的步驟最簡化,以捉高信息分享的效率。在推送系統(tǒng)的面

15、麗,人們只需耍做這幾件事,假如你是一個網(wǎng)民,你只需 要訂閱好你所感興趣的內(nèi)容,然后就可以悠哉的等待最新信息的到來,想接受什 么消息和拒絕接受什么消息完全由用戶來決定,以此體現(xiàn)了個性化的用戶體驗; 接入你是一個組織,你想妾發(fā)布一些消息(如新聞、通知等),你只需要填寫好 消息的內(nèi)容,推送系統(tǒng)的服務(wù)器就會自動地將消息轉(zhuǎn)發(fā)推送到被訂閱的用戶去, 不必?fù)?dān)心用戶因為不在線而因此的消息推送失敗,對于沒在線的用戶,服務(wù)器會 將消息保存下來,等待用戶下一次上線再推送,整個過程方便保險。1.3論文結(jié)構(gòu)簡介本論文各章節(jié)內(nèi)容安排如下:第一章作為本論文的緒論,主要論述了消息推送技術(shù)的背景現(xiàn)況、推送系 統(tǒng)的概述,并簡要介

16、紹了本文的結(jié)構(gòu)。第二章會把實現(xiàn)系統(tǒng)的技術(shù)原理進(jìn)行詳細(xì)的闡述,比如如何實現(xiàn)推送功能、 如何對在線用戶進(jìn)行管理、如何將信息中轉(zhuǎn)保存等等關(guān)鍵技術(shù)問題,也會討論到 系統(tǒng)的運行機(jī)制和一些用到的關(guān)鍵算法。第三章主要講述整個推送系統(tǒng)的框架設(shè)計,該章首先會對系統(tǒng)進(jìn)行一個整 體化的分析論述,整體論述后還會對系統(tǒng)的各大模塊進(jìn)行功能性的介紹,并分析 其在整個系統(tǒng)中的重要性以及各個模塊之間是如何銜接起來支撐整個系統(tǒng)。第四章將會深入分析各個模塊的設(shè)計實現(xiàn)過程,剖析各模塊的內(nèi)部結(jié)構(gòu), 也講述到實現(xiàn)過程屮要注意的細(xì)節(jié)以及如何對模塊進(jìn)行優(yōu)化以保證系統(tǒng)的運行 效率。第五章主要對消息推送系統(tǒng)的設(shè)計實現(xiàn)進(jìn)行一個整體總結(jié),并ii提出

17、本次 實踐當(dāng)中存在的一些局限性和有待改進(jìn)的地方。第二章技術(shù)與原理2.1推送基本原理盡管在定義上push方式的消息推送是由服務(wù)器占有主動權(quán),終端用戶處于 被動狀態(tài),但其實技術(shù)實現(xiàn)的背后還是基于“請求響應(yīng)”模式,在這模式上 做了一定修改。終端用戶一旦設(shè)置好自己的訂閱內(nèi)容,就不?!半[蔽”地向服務(wù) 器發(fā)送請求,而一旦服務(wù)器發(fā)現(xiàn)有新的消息需要推送,就給終端返回推送消息, 以此實現(xiàn)了推送的效果。在這里主要涉及到兩個方面,一個是輪詢時間,它代表 著終端訪問服務(wù)器的時間間隔;另一個是服務(wù)器的請求處理方式,接收到來自終 端的請求后,服務(wù)器可以選擇掛起連接或者馬上返回消息給用戶。根據(jù)輪詢時間、請求處理方式,分為以

18、下兩種pusho簡單輪詢:客戶端一般以定時方式發(fā)起請求,服務(wù)端處理后返回響應(yīng)。客戶端定時進(jìn)行輪詢, 間隔可配置t1.1:相應(yīng)2.1: 圖2.1簡單輪詢原理特點:原理、客戶端/服務(wù)端實現(xiàn)簡單可根據(jù)應(yīng)用場景調(diào)整輪詢時間間隔服務(wù)端需要處理大量請求長輪詢:客戶端發(fā)起請求后服務(wù)端將該請求掛起(不返回響應(yīng)),直到超吋、異?;?需要處理響應(yīng)(推內(nèi)容)才返冋??蛻舳耸盏巾憫?yīng)后再次請求(即輪詢)服務(wù)端, 并處理響應(yīng)。請求請求對y1.1:掛起請求消息服務(wù)監(jiān)聽上、返冋響應(yīng) 后立即開 始下一次 輪詢請求4:響應(yīng)4.1:請求2:處t3:獲取z前性起的請求圖2.1.2長輪詢原理特點:實時性高服務(wù)端需要管理掛起請求2.2

19、push技術(shù)優(yōu)缺點分析push技術(shù)作為一種網(wǎng)絡(luò)信息獲取技術(shù)是成功的,它的好處町概括為:可以避免用戶在網(wǎng)上無口的上網(wǎng)查找,利用離線瀏覽技術(shù)使用戶可采用 離線方式進(jìn)行閱讀??梢宰礁弑煌扑托畔⒌臏?zhǔn)確性,控制搜索深度,過濾不必要的信息。能被推送的信息內(nèi)容有教學(xué)資料、新聞、電影、咅樂、房產(chǎn)信息、股市行情、共享軟件、天氣預(yù)報等。能被推送的文件有文字、圖形、圖像、聲咅、小程序等,并且可以超文 本或通過超文本訪問的文件的形式保存在用戶的硬盤上??梢酝扑屯ㄟ^專用的播放程序?qū)崊硷@示的信息,向用戶提供多媒體信息。 push服務(wù)器能對各個用戶的興趣和偏好進(jìn)行智能性識別、預(yù)測,根據(jù)用 戶要求自動搜集定制信息并定期快速、

20、連續(xù)不斷地向目標(biāo)用戶主動推送, 滿足了用戶的個性化需求。但同時也存在很多需要完善的地方:難以滿足用戶個性化的要求。push技術(shù)是按照預(yù)先確定的一系列標(biāo)準(zhǔn)來傳送 信息的,這種標(biāo)準(zhǔn)是建立在發(fā)送方和接收方之間的協(xié)議上,而不是以用戶需 求為基礎(chǔ)的。多數(shù)push產(chǎn)品針對性較差,滿足個性化程度不高,這在覆蓋 推送中表現(xiàn)尤為突出。未能解決信息過載問題。push技術(shù)本來是為了解決因特網(wǎng)上信息過載而出現(xiàn) 的新技術(shù),然而結(jié)果事與愿違。如果push產(chǎn)品大量使用,反而會加重網(wǎng)絡(luò) 信息過載。數(shù)據(jù)風(fēng)暴問題。“推送技術(shù)”與過去常用的“拉取技術(shù)”的顯著不同是:拉 取是由用戶來控制信息的檢索與獲取,用戶是主動的。而推送技術(shù)則考

21、慮由 其他方來控制信息的傳送。當(dāng)信息捉供商將大量信息強(qiáng)制性地推向用戶時, 便會將用戶淹沒于“信息垃圾”中。網(wǎng)絡(luò)帶寬浪費問題。push技術(shù)為網(wǎng)絡(luò)帶來新的服務(wù)模型的同時也引起了帶寬 浪費問題,這主要是由push服務(wù)器主動發(fā)送大量信息或客戶代理自動進(jìn)行 站點搜索所造成的。因此,push產(chǎn)品必須考慮如何有效地利用帶寬,這將是 決定該項技術(shù)前景的關(guān)鍵。2.3 java網(wǎng)絡(luò)編程木推送系統(tǒng)主要使用java語言實現(xiàn),因此java的網(wǎng)絡(luò)編程在本項口屮占有很 大比重,而網(wǎng)絡(luò)編程木來就是開發(fā)者的必備技術(shù)z,接下來本節(jié)會簡單介紹一 下網(wǎng)絡(luò)編程以及java本身網(wǎng)絡(luò)編程的一些技巧。從通俗的角度上來說,網(wǎng)絡(luò)編程就是指通過程

22、序?qū)?shù)據(jù)從一臺網(wǎng)絡(luò)設(shè)備上傳 輸?shù)搅硪慌_設(shè)備之中去,而上述所說的程序?qū)嶋H上就是指服務(wù)程序和客戶端,毎 一次的數(shù)據(jù)連接都是由一方提出請求,等另一方確認(rèn)接受之后才會得以進(jìn)行,并 且客戶端程序就是提出請求的一方,服務(wù)器就是被請求然后確認(rèn)接受的一方。在講解網(wǎng)絡(luò)傳送的原理之前,我們需要理解兩個概念,一個是ip地址,一 個是端口號。ip地址是一個32位的二進(jìn)制序列,通常被分割成四個八位的二進(jìn)制數(shù),它 好比是一臺電話的電話號碼,用來識別出互聯(lián)網(wǎng)中的唯一設(shè)備,正是冇了這個唯 一的標(biāo)識,我們才可以在千千萬萬臺設(shè)備中將數(shù)據(jù)方便快捷的傳輸?shù)轿覀兊哪康?主機(jī)中去。而端口號是用來識別數(shù)一臺主機(jī)屮的一個服務(wù),也就是一個程序

23、,每個程序 都有口己的端口號,知道了端口號之后數(shù)據(jù)達(dá)到主機(jī)后就可以根據(jù)端口號分配到 目的程序屮去,以保證數(shù)據(jù)不會被其它服務(wù)所接收。所以,通過ip地址/端口號,我們就可以識別出網(wǎng)絡(luò)中的唯一服務(wù),實現(xiàn)雙 方的連接和數(shù)據(jù)的傳送。盡管數(shù)據(jù)的傳送是建立在ip地址/端口號對之上,但傳送的方式根據(jù)其機(jī)制 的不同也分為多利而當(dāng)今網(wǎng)絡(luò)連接協(xié)議主要分為兩大類:tcp協(xié)議以及udp 協(xié)議。tcp是一種面向連接的協(xié)議,言下z意就是在數(shù)據(jù)傳送2而設(shè)備z間必須先 建立好可靠安全的連接,而每一次的連接必須雙方完成了 “三次握手”之后才能 得以進(jìn)行,即雙方事前必須經(jīng)過三重確認(rèn)后才可以傳輸數(shù)據(jù)。另夕卜,tcp連接是 一種安全的

24、連接,它保證數(shù)據(jù)一定會傳送到目的地,如果數(shù)拯在傳輸過程中意外 丟失,它會通過一系列的機(jī)制進(jìn)行重發(fā),并且設(shè)冇阻塞機(jī)制以保證網(wǎng)絡(luò)的穩(wěn)定性, 常見的tcp協(xié)議有http協(xié)議、ftp協(xié)議等等。udp是一種無連接協(xié)議,即在傳送數(shù)據(jù)之前并不需要建立一個傳輸通道,而 是從程序屮獲取到所要發(fā)送的數(shù)據(jù),隨后將之“扔”到網(wǎng)絡(luò)屮,整個過程并不需 要維護(hù)一個數(shù)據(jù)的連接狀態(tài),它使用的是最大交付方式,即不保證數(shù)拯能準(zhǔn)確地 傳輸?shù)侥康某绦虍?dāng)中,但因為不設(shè)有阻塞機(jī)制,因此速度會相對tcp連接快, 適用于一些流媒體或語音數(shù)據(jù)等傳輸,平時我們使用的“ping”命令就是對目標(biāo) 主機(jī)發(fā)送udp協(xié)議數(shù)據(jù)包以測試當(dāng)前網(wǎng)絡(luò)是否通行。簡單介

25、紹完一些關(guān)于網(wǎng)絡(luò)編程的概念之后,接下來談一下現(xiàn)實java網(wǎng)絡(luò)編程 中的實際方法,由于本推送系統(tǒng)使用的是tcp協(xié)議,因此下而我們暫時不探討 java網(wǎng)絡(luò)編程中udp連接的實現(xiàn)。在java語言中,對于tcp方式的網(wǎng)絡(luò)編程提供了良好的支持,在實際實現(xiàn) ii寸,以.socket類代表客戶端連接,以.serversocket類代表服務(wù)器 端連接。在進(jìn)行網(wǎng)絡(luò)編程時,底層網(wǎng)絡(luò)通訊的細(xì)節(jié)已經(jīng)實現(xiàn)了比較高的封裝,所 以在程序員實際編程時,只需要指定ip地址和端口號碼就可以建立連接了。正 是由于這種高度的封裝,一方面簡化了 java語言網(wǎng)絡(luò)編程的難度,另外也使得 使用java語言進(jìn)行網(wǎng)絡(luò)編程時無法深入到網(wǎng)絡(luò)的底層

26、,所以使用java語言進(jìn)行 網(wǎng)絡(luò)底層系統(tǒng)編程很困難,具體點說,java語言無法實現(xiàn)底層的網(wǎng)絡(luò)嗅探以及獲 得ip包結(jié)構(gòu)等信息。但是由于java語言的網(wǎng)絡(luò)編程比較簡單,所以還是獲得了 廣泛的使用。卜面分別介紹一下在java語言中客戶端和服務(wù)器端的實現(xiàn)步驟。在客戶端網(wǎng)絡(luò)編程中,首先需要建立連接,在java api中以.socket 類的對象代表網(wǎng)絡(luò)連接,所以建立客戶端網(wǎng)絡(luò)連接,也就是創(chuàng)建socket類型的 對彖,該對彖代表網(wǎng)絡(luò)連接,示例如下:socket socket 1 = new socket( u 00,10000);socket socket2 = new sock

27、et( “'' ,80);上面的代碼中,socketl實現(xiàn)的是連接到ip地址是00的計算機(jī) 的10000號端口,iflj socket2實現(xiàn)的是連接到域名是的計算機(jī)的 80號端i,至于底層網(wǎng)絡(luò)如何實現(xiàn)建立連接,對于程序員來說是完全透明的。 如果建立連接時,本機(jī)網(wǎng)絡(luò)不通,或服務(wù)器端程序未開啟,則會拋出異常。連接一旦建立,則完成了客戶端編程的第一步,緊接著的步驟就是按照“請 求響應(yīng)”模型進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換,在java語言中,數(shù)據(jù)傳輸功能由jaw 10實 現(xiàn),也就是說只需耍從連接中獲得輸入流和輸出流即可,然后將需要發(fā)送的數(shù)據(jù) 寫入連接對象的輸出流中,在發(fā)送完成

28、以后從輸入流中讀取數(shù)據(jù)即可。示例代碼 如下:outputstream os = socket 1 .getoutputstream(); 獲得輸岀流 inputstream is = socket 1 .getinputstream();獲得輸入流上面的代碼屮,分別從socket 1這個連接對象獲得了輸出流和輸入流對象, 在整個網(wǎng)絡(luò)編程中,后續(xù)的數(shù)據(jù)交換就變成了 10操作,也就是遵循“請求響應(yīng)” 模型的規(guī)定,先向輸岀流中寫入數(shù)據(jù),這些數(shù)據(jù)會被系統(tǒng)發(fā)送岀去,然后在從輸 入流中讀取服務(wù)器端的反饋信息,這樣就完成了一次數(shù)據(jù)交換過程,當(dāng)然這個數(shù) 據(jù)交換過程可以多次進(jìn)行。這里獲得的只是最基木的輸出流和輸

29、入流對象,還可以根據(jù)前面學(xué)習(xí)到的10 知識,使用流的嵌套將這些獲得到的基本流對象轉(zhuǎn)換成需要的裝飾流對象,從而 方便數(shù)據(jù)的操作。最后當(dāng)數(shù)據(jù)交換完成以后,關(guān)閉網(wǎng)絡(luò)連接,釋放網(wǎng)絡(luò)連接占用的系統(tǒng)端ii和 內(nèi)存等資源,完成網(wǎng)絡(luò)操作,示例代碼如下:socket l.close();介紹完一個簡單的客戶端編程的示例,下面接著介紹一 ftcp類型的服務(wù)器 端的編寫。首先需要說明的是,客戶端的步驟和服務(wù)器端的編寫步驟不同,所以 在學(xué)習(xí)服務(wù)器端編程吋注意不要和客戶端混淆起來。在服務(wù)器端程序編程中,由于服務(wù)器端實現(xiàn)的是被動等待連接,所以服務(wù)器 端編程的第一個步驟是監(jiān)聽端口,也就是監(jiān)聽是否冇客戶端連接到達(dá)。實現(xiàn)服務(wù)

30、器端監(jiān)聽的代碼為:serversocket ss = new serversocket( 10000);該代碼實現(xiàn)的功能是監(jiān)聽當(dāng)前計算機(jī)的10000號端口,如果在執(zhí)行該代碼時,10000號端口已經(jīng)被別的程序占用,那么將拋出異常。否則將實現(xiàn)監(jiān)聽。服務(wù)器端編程的第二個步驟是獲得連接。該步驟的作用是當(dāng)冇客戶端連接到 達(dá)吋,建立一個和客戶端連接對應(yīng)的socket連接對象,從而釋放客戶端連接對 于服務(wù)器端端口的占用。實現(xiàn)功能就像公司的前臺一樣,當(dāng)一個客戶到達(dá)公司時, 會告訴前臺我找某某某,然后前臺就通知某某某,然后就可以繼續(xù)接待其它客 戶了。通過獲得連接,使得客戶端的連接在服務(wù)器端獲得了保持,另外使得服

31、務(wù) 器端的端口釋放出來,可以繼續(xù)等待其它的客戶端連接。實現(xiàn)獲得連接的代碼 是:socket socket = ss.accept();該代碼實現(xiàn)的功能是獲得當(dāng)而連接到服務(wù)器端的客戶端連接。需耍說明的是 accept是一個阻塞方法,也就是當(dāng)無連接時,該方法將阻塞程序的執(zhí)行,直到連 接到達(dá)吋才執(zhí)行該行代碼。另外獲得的連接會在服務(wù)器端的該端口注冊,這樣以 后就可以通過在服務(wù)器端的注冊信息直接通信,而注冊以后服務(wù)器端的端口就被 釋放出來,又可以繼續(xù)接受其它的連接了。連接獲得以后,后續(xù)的編程就和客戶端的網(wǎng)絡(luò)編程類似了,這里獲得的socket 類型的連接就和客戶端的網(wǎng)絡(luò)連接一樣了,只是服務(wù)器端需要首先讀取

32、發(fā)送過來 的數(shù)據(jù),然后進(jìn)行邏輯處理以后再發(fā)送給客戶端,也就是交換數(shù)據(jù)的順序和客戶 端交換數(shù)據(jù)的步驟剛好相反。這部分的內(nèi)容和客戶端很類似,所以就不重復(fù)了。最后,在服務(wù)器端通信完成以后,關(guān)閉服務(wù)器端連接。實現(xiàn)的代碼為:ss.close();綜上所述,java網(wǎng)絡(luò)編程步驟大概可以概描為如下圖:圖2.3.1網(wǎng)絡(luò)編程流程2.4 java數(shù)據(jù)庫編程推送系統(tǒng)服務(wù)器可能會而臨著大量數(shù)據(jù)的存儲和轉(zhuǎn)發(fā),也會包括一系列的事 務(wù)操作,因此系統(tǒng)需要數(shù)據(jù)庫的技術(shù)支持來保證運作的效率。木推送系統(tǒng)使用了 mysql數(shù)據(jù)庫來維護(hù)數(shù)據(jù),下面會介紹一下java語言中數(shù)據(jù)庫的使用技巧。2.4.1 jdbc 簡介jdbc (java

33、data base connectivityjava 數(shù)據(jù)庫連接)是一種用于執(zhí)行 sql 語句的java api,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用java語言 編寫的類和接口組成。jdbc提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接 口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。有了 jdbc,向各種關(guān)系數(shù)據(jù)發(fā)送sql語句就是一件很容易的事。換言之, 有了 jdbc api,就不必為訪問sybase數(shù)據(jù)庫專門寫一個程序,為訪問oracle 數(shù)據(jù)庫又專門寫一個程序,或為訪問informix數(shù)據(jù)庫又編寫另一個程序等等,程 序員只需用jdbc api寫一個程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送s

34、ql調(diào)用。 同時,將java語言和jdbc結(jié)合起來使程序員不必為不同的平臺編寫不同的應(yīng) 用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是java語言“編 寫一次,處處運行”的優(yōu)勢。java數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于java應(yīng)用程序連接數(shù)據(jù)庫的標(biāo)準(zhǔn)方法。 jdbc對java程序員而言是api,對實現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接i i 模型。作為api, jdbc為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫廠商及第三方 屮間件廠商實現(xiàn)與數(shù)據(jù)庫的連接提供了標(biāo)準(zhǔn)方法。jdbc使用已有的sql標(biāo)準(zhǔn)并 支持與其它數(shù)據(jù)庫連接標(biāo)準(zhǔn),如odbc之間的橋接。jdbc實現(xiàn)了所有這些面向 標(biāo)準(zhǔn)的目標(biāo)并且具有簡單、嚴(yán)

35、格類型定義且高性能實現(xiàn)的接口。java具有堅固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上門動卜載等特性, 是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要的只是java應(yīng)用程序與各種不同數(shù) 據(jù)庫之間進(jìn)行對話的方法。而jdbc正是作為此種用途的機(jī)制。2.4.2 java數(shù)據(jù)庫操作由于本系統(tǒng)采用的是mysql數(shù)據(jù)庫,所以本節(jié)接下來只介紹java語言中 mysql數(shù)據(jù)庫的使用方法。首先,我們必須在主機(jī)中先安裝好mysql數(shù)據(jù)庫以及在項目中導(dǎo)入 mysql數(shù)據(jù)庫的jdbc驅(qū)動包以保證java程序能正常訪問數(shù)據(jù)庫,以上操作 網(wǎng)上有具體教程,在這里不進(jìn)行詳述。完成上述兩部后,我們就可以使用jdbc提供的api對mysq

36、l數(shù)據(jù)庫進(jìn) 行操作,操作過程主要分成以下幾步:1、加載合適的jdbc驅(qū)動程序class-forname(driver);mysql 驅(qū)動程序:com.mysql.jdbc.driveroracle 驅(qū)動程序:oracle.jdbc.driver.oracledriversqlserver驅(qū)動程序:com.microsoft.jdbc.sqlserve 匚 sqlserverdriver2、建立數(shù)據(jù)庫連接與mysql數(shù)據(jù)庫連接的方法:connection con=drivermanageigetconnection(“jdbc:mysql:主方l ip 或主 機(jī)名:3306/數(shù)據(jù)庫名”,用戶名,

37、密碼);j a v a. sq i. dri vem an ager用來處理裝載駆動程序并口為創(chuàng)建新的數(shù)據(jù)庫 連接提供支持;java.sql.connection用于完成對特:定定數(shù)據(jù)庫的連接;java.sql.statement用于對特定的數(shù)據(jù)庫執(zhí)行sql語句; java.sql.statement又包含了以下兩個重要的子類型:java.sql.preparedstatement用于執(zhí)行預(yù)編譯的sql語句;java.sql.callablestatement用于執(zhí)行數(shù)據(jù)庫屮存儲的過程的調(diào)用; java.sql.resultset用丁保存查詢所得的結(jié)杲集3、創(chuàng)建statement對象state

38、ment st=con.createstatement(); 最后可以不關(guān)閉,但推薦關(guān)閉 利用statement對象可以執(zhí)行靜態(tài)sql語句,靜態(tài)sql語句可以是select 語句、delete語句、update語句和insert語句。執(zhí)行sql語句statement接口提供了三種執(zhí)彳亍sql語句的方法:executequeryo、 executeupdate()和execute。具體使用哪一個方法由sql語句木身來決定。executequery用于產(chǎn)生單個結(jié)果集的語句,例如select語句等。executeupdate 用于執(zhí)行 insert、update 或 delete 語句以及 sql

39、ddl (數(shù)據(jù)定義語言)語句,例如 create table 和 drop table insert、 update或delete語句的效果是修改表中零行或多行中的一列或多列。 executeupdate的返回值是一個 整數(shù),指示受影響的行數(shù)(即更新計數(shù))。對于 create table或drop table等不操作行的語句,executeupdate的返冋值 總為零。execute用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者組合的語句。 一般不會需要該高級功能。 jdbc在編譯時并不對將要執(zhí)行的sql查詢語句作任何檢查,只是將其 作為一個string類對象,直到驅(qū)動程序執(zhí)行sql查詢語句時才知

40、道其是否正確。 對于錯誤的sql杳詢語句,在執(zhí)行時將會產(chǎn)生sqlexceptiono 一個statement對象在同一吋間只能打開一個結(jié)果集,對第二個結(jié)果集 的打開隱含著對第一個結(jié)果集的關(guān)閉。 如果想對多個結(jié)果集同時操作,必須創(chuàng)建出多個statement對象,在每 個statement對象上執(zhí)行sql查詢語句以獲得相應(yīng)的結(jié)果集。 如果不需要同時處理多個結(jié)果集,則可以在一個statement對象上順序 執(zhí)行多個sql查詢語句,對獲得的結(jié)果集進(jìn)行順序操作。str="insertinto customer values('wangyang',24,'beijing&

41、#39;,'wangyang')n;int recordnumber=st.executeupdate(str);執(zhí) 行 executeupdate()方法 返冋該 sql語句涉及的記錄數(shù)。str="select* from mycustomer" 查詢表中記錄resultset rs=st.executequery(str);出于 sql 語句是 select,用 executequeryo 方法,返回一個結(jié)果集保存在resultset對象rs屮。4、分析resultset對象 執(zhí)行完畢sql語句后,將返回一個resultset類的對彖,它包含所冇的 杳詢

42、結(jié)果。但對resultset類的對象方式依賴于光標(biāo)(cursor)的 類型,而對每 一行中的各個列,可以按任何順序進(jìn)行處理(當(dāng)然,如果按從左到右的順序?qū)Ω?列進(jìn)行處理可以獲得較高的執(zhí)行效率);resultset類中的course方式主要有:resultset.type_forward_only(為缺省設(shè)置):光標(biāo)只能前進(jìn)不能后退, 也就是只能從第一個一直移動到最后一個。resultset.type_scroll_sensitive:允許光標(biāo)前進(jìn)或后退并感應(yīng)到其它 resultset的光標(biāo)的移動情形。resultset.type_scroll_insensitive:允許光標(biāo)前進(jìn)或后退并不能感應(yīng)

43、 到其它resultset的光標(biāo)的移動情形。resultset類中的數(shù)據(jù)是否允許修改主要冇:resultset.concur_read_only (為缺省設(shè)置):表示數(shù)據(jù)只能只讀,不 能更改。resultset.concur_updatable:表示數(shù)據(jù)允許被修改??趈以在創(chuàng)建statement或preparedstatement對象時指定resultset的這兩個特 性。statement stmt=con.createstatement(resultset.type_forward_only,resultset.concur _read_only);或preparedstatement p

44、stmton.preparestatementc'insert into booktable values (?,?,?)h,resultset.type_scroll_insensitive,resultset.concur_updatab le); resultset類的對象維持一個指向當(dāng)前行的指針,利用resultset類的next() 方法可以移動到卜一行(在jdbc中,java程序一次只 能看到一行數(shù)據(jù)),如杲 next()的返回值為false,則說明已到記錄集的尾部。另外jdbc也沒冇類似odbc 的書簽功能的方法。 利用resultset類的ge(xxx()方法可以獲得某

45、一列的結(jié)果,其中xxx代 表jdbc中的java數(shù)據(jù)類型,如getlnt()> getstring()> getdate()等。訪問時需要 指定要檢索的列(可以采用int值作為列號(從1開始計數(shù))或指定列(字段) 名方式,但字段名不區(qū)別字母的大小寫)。示例:while(rs.next()int id=rs.getlnt("id");string name=rs.getstring(ncnamen);int age=rs.getint(ncagen);string address=rs.getstring(ncaddressn);string email=rs.g

46、etstring(hcemailm);system.out.println(id+n n+name+n h+age+n h+address+h h+email);獲得結(jié)果集中的結(jié)構(gòu)信息:利用resultset類的getmetadata()方法來獲得結(jié) 果集屮的一些結(jié)構(gòu)信息(主要提供用來描述列的數(shù)量、列的名稱、列的數(shù)據(jù)類型。 利用resulsetmetadata類中的方法)。resultsetmetadata rsmd = rs.getmetadata();rsmd.getcolumncounto; 返回結(jié)杲集中的列數(shù) rsmd.getcolumnlabel(l); /返回第一列的列名(字段名)

47、 例如:statement stmt=con.createstatement();resultset rs=stmt.executequery(hselect * from tablename");for(int i=l; i<=rs.getmetadata().getcolumncount(); i+) 跟蹤顯示各個列的 名稱system.out.print(rs. getcolumnname (i)+"t");while(rs.next() 跟蹤顯示各個列的值for(int j= 1; j<=rs.getmetadata().getcolumnco

48、unt(); j+)system.out.print(rs.getobject(j)+"tn);5、關(guān)閉連接(注意關(guān)閉的順序)例:rs.close();st.close();con.close()2.5 xmpp協(xié)議介紹xmpp (可擴(kuò)展消息處理現(xiàn)場協(xié)議)是基于可擴(kuò)展標(biāo)記語言(xml)的協(xié) 議,它用于即時消息(im)以及在線現(xiàn)場探測。它在促進(jìn)服務(wù)器z間的準(zhǔn)即時 操作。這個協(xié)議町能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消 息,即使其操作系統(tǒng)和瀏覽器不同。xmpp協(xié)議具有以下特點: xmpp協(xié)議是公開的,由jsf開源社區(qū)組織開發(fā)的。xmpp協(xié)議并不屬于 任何的機(jī)構(gòu)和個人,而是屬

49、于整個社區(qū),這一點從根本上保證了其開放性。 xmpp協(xié)議具有良好的擴(kuò)展性。在xmpp中,即吋消息和到場信息都是基 于xml的結(jié)構(gòu)化信息,這些信息以xml節(jié)(xml stanza)的形式在通信實 休間交換。xmpp發(fā)揮了 xml結(jié)構(gòu)化數(shù)據(jù)的通用傳輸層的作用,它將出席 和上下文敏感信息嵌入到xml結(jié)構(gòu)化數(shù)據(jù)屮,從而使數(shù)據(jù)以極高的效率傳 送給最合適的資源。基于xml建立起來的應(yīng)用具有良好的語義完整性和擴(kuò) 展性。 分布式的網(wǎng)絡(luò)架構(gòu)。xmpp協(xié)議都是基于client/server架構(gòu),但是xmpp 協(xié)議本身并沒有這樣的限制。網(wǎng)絡(luò)的架構(gòu)和電子郵件十分相似,但沒有結(jié)合 任何特定的網(wǎng)絡(luò)架構(gòu),適用范圍非常廣泛。

50、 xmpp具有很好的彈性。xmpp除了叮用在即時通信的應(yīng)用程序,還能用 在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、檔案共享、游戲、遠(yuǎn)端系統(tǒng)監(jiān)控等。 安全性。xmpp在client-to-server通信,和server-to-server通信中都使用 tls (transport layer security)協(xié)議作為通信通道的加密方法,保證通信的安 全。任何xmpp服務(wù)器可以獨立于公眾xmpp網(wǎng)絡(luò)(例如在企業(yè)內(nèi)部網(wǎng)絡(luò) 中),而使用sasl及tls等技術(shù)更加增強(qiáng)了通信的安全性。xmpp協(xié)議網(wǎng)絡(luò)架構(gòu):xmpp是一個典型的c/s架構(gòu),而不是像大多數(shù)即時通訊軟件一樣,使用 p2p客戶端到客戶端的架構(gòu),也就是說

51、在大多數(shù)情況下,當(dāng)兩個客戶端進(jìn)行通訊 時,他們的消息都是通過服務(wù)器傳遞的(也有例外,例如在兩個客戶端傳輸文件 時).采用這種架構(gòu),主要是為了簡化客戶端,將大多數(shù)工作放在服務(wù)器端進(jìn)行, 這樣,客戶端的工作就比較簡單,而且,當(dāng)增加功能吋,多數(shù)是在服務(wù)器端進(jìn) 行.xmpp服務(wù)的框架結(jié)構(gòu)如下圖所示.xmpp屮定義了三個角色,xmpp客戶 端,xmpp服 務(wù)器、網(wǎng)關(guān).通信能夠在這三者的任意兩個之間雙向發(fā)生.服務(wù) 器同時承擔(dān)了客戶端信息記錄、連接管理和信息的路由功能網(wǎng)關(guān)承擔(dān)著與異構(gòu) 即時通信系統(tǒng)的互聯(lián) 互通,異構(gòu)系統(tǒng)可以包括sms(短信)、msn、icq等.基 本的網(wǎng)絡(luò)形式是單客戶端通過tcp /ip連接

52、到單服務(wù)器,然后在之上傳輸xml, 工作原理是: 節(jié)點連接到服務(wù)器; 服務(wù)器利用本地目錄系統(tǒng)屮的證書對其認(rèn)證; 節(jié)點指定目標(biāo)地址,讓服務(wù)器告知目標(biāo)狀態(tài); 服務(wù)器查找、連接并進(jìn)行相互認(rèn)證; 節(jié)點之間進(jìn)行交互。第三章架構(gòu)設(shè)計木章將會圍繞著系統(tǒng)的架構(gòu)設(shè)計展開敘述,包括整個系統(tǒng)的架構(gòu)原理(系統(tǒng) 各主要部件以及部件z間的關(guān)系),業(yè)務(wù)的用例實現(xiàn)以及系統(tǒng)后臺數(shù)據(jù)庫的設(shè)計。3.1系統(tǒng)架構(gòu)及原理整個push系統(tǒng)主要分成三大部分,推送端、接收端以及服務(wù)器端,推送端 主要實現(xiàn)消息的發(fā)布,發(fā)布的消息將會發(fā)送到服務(wù)器屮進(jìn)行儲存處理;服務(wù)器接 收到發(fā)布消息后會口動查找出該發(fā)布方的所有訂閱接收方,并檢測接收方是否在 線監(jiān)聽

53、消息,如果是則向其轉(zhuǎn)發(fā)推送消息,如果沒冇在線就會將消息保存起來, 等接收方卜次登陸的時候再從系統(tǒng)中取出來轉(zhuǎn)發(fā)出去;接收方登陸過后就可以監(jiān) 聽消息,而需要監(jiān)聽什么消息也是完全有自己確定,通過訂閱命令可以訂閱自己 喜歡的頻道。整個推送系統(tǒng)的設(shè)計重點落在了服務(wù)器端,因為服務(wù)器連接著網(wǎng)方,起著傳 遞數(shù)據(jù)的媒介作用,而月其屮述要做很多的處理。服務(wù)器由一下幾大部件構(gòu)成: manager -負(fù)責(zé)處理和管理來自兩端的請求,是整個系統(tǒng)的最高層的核 心部件; parser -解析部件,負(fù)責(zé)解析來自客戶端的請求; cache緩存部件,負(fù)責(zé)管理存放服務(wù)系統(tǒng)屮的一些頻繁常用的數(shù)據(jù), 數(shù)據(jù)都保存在內(nèi)存中,以降低后臺數(shù)據(jù)庫

54、的壓力; dbmanager 數(shù)據(jù)庫管理部件,負(fù)責(zé)管理后臺數(shù)據(jù)庫以及對數(shù)據(jù)庫進(jìn) 行操作; loger-日志部件,負(fù)責(zé)將系統(tǒng)行為輸出到日志文件中,以供查詢; onlinemanager 負(fù)責(zé)管理與客戶端的連接,連接分為長連接和短連接 兩種,分別存放在兩個不同的數(shù)據(jù)結(jié)構(gòu)中去;上述部件在系統(tǒng)屮都有著自己的工作職責(zé),通過它們之間的合作依賴推送服 務(wù)器就能順利的獲取來口發(fā)送端的消息并口將之安全送到接收端去,完成了推送系統(tǒng)的核心功能。3.2業(yè)務(wù)用例的實現(xiàn)本節(jié)會簡述push系統(tǒng)的一些具體業(yè)務(wù)用例,主要圍繞著兩個方面展開,一 個是發(fā)送方,另一個是接受方,雙方的需求不同因此功能用例也各不相同。推送方可以進(jìn)行登錄

55、、注冊、注銷以及推送消息等業(yè)務(wù)行為:pusher圖3.2.1推送方用例圖接收方業(yè)務(wù)功能相對多一點,用戶模塊方面他可以登錄、注冊、注銷等,登 錄完成后可以進(jìn)行監(jiān)聽消息以及取消監(jiān)聽,還有訂閱/取消訂閱已經(jīng)查找訂閱號 功能:圖3.2.2接收方用例圖以下是一個完整推送流程的順序圖:推送條統(tǒng)圖3.2.3推送流程圖3.3數(shù)據(jù)庫設(shè)計由于推送系統(tǒng)會面臨高并發(fā)的運行壓力,用戶量的增大會使得服務(wù)器對數(shù) 據(jù)庫的頻繁訪問查詢,因此對數(shù)據(jù)庫的設(shè)計冇著很高性能要求,如何優(yōu)化數(shù)據(jù)庫 的表關(guān)系,如何優(yōu)化數(shù)據(jù)的存儲方式將會大大決定了系統(tǒng)的運行效杲。木系統(tǒng)使 用mysql關(guān)系型數(shù)據(jù)庫來維護(hù)系統(tǒng)的數(shù)據(jù),使用的儲存引擎的innodb

56、o3.3.1構(gòu)建數(shù)據(jù)庫的系統(tǒng)流程構(gòu)建一個完整、高效的數(shù)據(jù)庫管理系統(tǒng)可以說是一個比較復(fù)朵的過程,通常包含以下5個基本步驟。1、定義數(shù)據(jù)庫的目標(biāo)在這一步,需要定義數(shù)據(jù)庫實現(xiàn)功能,目標(biāo)以及系統(tǒng)運行的環(huán)境,最終形成一個怎么樣的數(shù)據(jù)庫管理系統(tǒng)。2、數(shù)據(jù)庫的邏輯設(shè)計規(guī)劃出數(shù)據(jù)庫的邏輯設(shè)計,例如:設(shè)計數(shù)據(jù)庫屮如何定義表以及表z間的關(guān)系。在某種程度上說,這一步和物理數(shù)據(jù)庫的設(shè)計以及實現(xiàn)無關(guān)。3、數(shù)據(jù)庫的物理設(shè)計這一步在數(shù)據(jù)庫的邏輯設(shè)計之上,把數(shù)據(jù)庫的邏輯設(shè)計轉(zhuǎn)化為數(shù)據(jù)庫的物理設(shè)計,如確定數(shù)據(jù)庫需要哪些軟件和碩件。4、數(shù)據(jù)庫的物理實現(xiàn)這一步屬于項目的實現(xiàn)階段。它建立在數(shù)據(jù)庫的物理設(shè)計z上,設(shè)計實際的物理數(shù)據(jù)以及

57、數(shù)據(jù)庫的服務(wù)器配置和存儲數(shù)據(jù)的程序代碼等。5、復(fù)查構(gòu)建的數(shù)據(jù)庫這一步為構(gòu)建數(shù)據(jù)庫的最后一步,檢查和評定構(gòu)建的數(shù)據(jù)庫是否滿足笫一步中的目標(biāo)及莫要求,同時述可以制定維護(hù)和更新數(shù)據(jù)庫的實施方案。構(gòu)建數(shù)據(jù)庫系統(tǒng)的流程如卜圖所示:圖數(shù)據(jù)庫設(shè)計步驟3.3.2表的具體設(shè)計 每個pusher方都有屬于口己的基木信息,包括簡介、昵稱、id、密碼、 發(fā)送口令等等,為了方便修改信息以及管理,我們將之統(tǒng)一存放到一個pushers 表屮。另外,由于系統(tǒng)在實際運行過程屮會頻繁的根據(jù)pusherld對pushers表進(jìn) 行查詢,因此需要將id字段定義為主鍵,這樣一來不僅可以保證了 pushehd的 唯一性,i佃且innodb引擎會自動生成一個id字段的索引以加大搜索效率。由 丁用戶昵稱以及密碼不能為空,所以我們還要對這些字段用not null關(guān)鍵字修飾。圖數(shù)據(jù)庫pushers表設(shè)計圖 每個接收方都有自己的基本信息,包括id、用戶名和登陸密碼等,統(tǒng) 一存放在recievers表屮,所有的字段都設(shè)置為非空,因為這些都是用戶的必要 信息,缺一不可,另外

溫馨提示

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

評論

0/150

提交評論