QQ项目
QQ第一部分:
1.數(shù)據(jù)庫
每一個QQ賬戶必須有
? a、 state:是否上線的狀態(tài)
? b、 IP:正在上線的主機(jī)的IP
? c、 port:UDP端口號(用這個和別的好友通訊)
? 注:TCP連接時,在服務(wù)器端有端口號,這個端口號是在上線連接時要寫入的,而客戶端
? 是隨機(jī)的分配一個端口。兩個客戶間進(jìn)行通訊時用的是無連接的UDP,每個客戶在數(shù)據(jù)庫
? 都有標(biāo)注的UDP端口號。
2.主外鍵關(guān)系
? 自連接,在同一張數(shù)據(jù)庫表中,主鍵又作為外鍵,(邏輯上是兩個實(shí)體,
? 實(shí)際上是一個實(shí)體)叫自連接。
? 注:本項(xiàng)目中好友對照表分開建表,更清晰。如果在一張表中,
? 記錄會冗余的。
3.加好友的原理
111——222
? 222——111
? 加好友:兩邊都同意,加兩條記錄。
?刪除,加黑名單是同理。
4.QQ運(yùn)行原理
?
?server—TCP(雙向,可靠,事先建立持續(xù)連接)—thread1(socket、I/O)——Client1
??????
????????? ?UDP連接(單向,不可靠,不用事先建立連接)
??????
????????? Client2
5.TCP連接
? TCP是持久連接,必須要用死循環(huán)來打通連接。
? UDP是非持久連接,用數(shù)據(jù)報來傳遞的,不用事先建立連接。
6.幾個注意的點(diǎn)
? a.字節(jié)流在寫入時不用換行,字符流必須要換行
?b.服務(wù)器端是先讀后寫,客戶端是先寫后讀。
QQ第二部分:
1.有別于前邊方法的幾個點(diǎn)
?a. 連接數(shù)據(jù)庫時:
??db.properties:是一個文件,以(鍵值對)的形式存儲的數(shù)據(jù)庫信息文件
??項(xiàng)目部署的時候,要把項(xiàng)目的.class文件給客戶,用戶名和密碼(公司自己的
??信息自己設(shè)定)都在里邊,項(xiàng)目中要用這些信息,可以通過方法引用,
??然后用戶也可以自己改變數(shù)據(jù)庫類型,端口號等,項(xiàng)目仍可正常的使用。
?b. 加背景時。
??加背景,因?yàn)镼Q用戶在注冊時選的QQ圖像是隨機(jī)的,所以以前的固定路徑不能
??使用,現(xiàn)在在ImgPanel的構(gòu)造時,給你一個path變量,即在生成圖像時用的是
??動態(tài)的圖片地址。初始化后顯示為不同的圖像。
?c. 布局管理器:box(我自己感覺像div選擇器一樣)
??盒子布局管理器,相當(dāng)于容器,以前的是容器按照布局管理器的格式加內(nèi)容,
??box可以直接添加內(nèi)容,還能設(shè)置格式,在各個box之間添加空白位置,進(jìn)行更合理
??的布局。
??布局方式:1.橫向布局。2.縱向布局。
?d. CommonUse.componetsBounds:為了居中對齊,調(diào)用工具類。
?
?e.以前寫頁面是在一個工程里邊,現(xiàn)在分為兩個工程,邏輯更清晰,
?頁面要寫在客戶端,數(shù)據(jù)庫要寫在服務(wù)器端,頁面獲取了數(shù)據(jù),交給
?socket和I/O,通過網(wǎng)絡(luò)給服務(wù)器端,然后服務(wù)器端獲取數(shù)據(jù),分析,從
?數(shù)據(jù)庫取出相應(yīng)的數(shù)據(jù),然后同樣通過socket和I/O返還給客戶端。
?f. 單寫一種業(yè)務(wù)不能滿足用戶的需求,所以現(xiàn)在要求,服務(wù)器必須能夠識別
?用戶的當(dāng)前的業(yè)務(wù)(注冊或者是登錄或者查找好友等等),完全企業(yè)級(用XML來實(shí)現(xiàn)報文的)
?應(yīng)用,用報文(一種協(xié)議)來識別,每個報文有文件頭,和報文體部分。
?報文頭:識別何種業(yè)務(wù)
?報文體:本次業(yè)務(wù)需要操作的資源(可以省略,例:只是一個命令)
?之前學(xué)計算機(jī)網(wǎng)絡(luò)時,說的協(xié)議頭文件,就是這個。
?
?g. 為了讓項(xiàng)目的邏輯更清晰,代碼中出現(xiàn)的都是與業(yè)務(wù)邏輯相關(guān)的內(nèi)容,
?把socket和I/O的東西都封裝到另外一個類里,然后引用到,該頁面即可。
?異常是Java通用層的東西(不該在業(yè)務(wù)邏輯層),Java業(yè)務(wù)邏輯層完成的業(yè)務(wù)的標(biāo)準(zhǔn)步驟:
?1.收集數(shù)據(jù) 2.打包上送 3.拿到結(jié)果 4.解析 5.顯示到頁面(最優(yōu)秀的代碼)
?
2.注意幾點(diǎn)
?a.?TCP的socket即I/O的對象,要在頁面的構(gòu)造方法init()方法前邊(修改后的頁面不存在這個問題)
??就是說,如果通道都沒有打通,那么頁面也不能顯示,要不然有什么意義
?b.?獲取圖像名字的時候,左邊要+1,因?yàn)樽筮吺情]區(qū)間。
??把圖像往下拉框里添加的時候,是作為一個文件夾來對待的,
??用到路徑信息。
?
?c.?一個攜帶數(shù)據(jù)的對象,為了在客戶端和服務(wù)器端都可進(jìn)行對象攜帶數(shù)據(jù)的
??操作,那么該對象必須實(shí)現(xiàn)序列化接口Serielizable()
轉(zhuǎn)載于:https://www.cnblogs.com/StephenChowcai/p/7291150.html
總結(jié)
- 上一篇: 2022十二月GBase8a第二次阶段考
- 下一篇: libcurl使用样例