Java實現聊天軟體之一,Java山寨“糗糗”分析

來源:互聯網
上載者:User

 

      最近一段時間一直沒有寫些代碼,手有些癢了,於是從網上找做執行個體的視頻,於是就找到了韓順平的這個山寨QQ的視頻,一邊看一邊寫,兩天也就完成了。

 

 

      今天把裡面的東西分析一下,雖說我以前用VB,C#,Java都寫過單對單的區域網路聊天小程式,不過這裡面確實有讓我眼前一亮的地方。

 

 

      先說這個的基本原理,看圖就可以知道,這個不同於我以往做的那個簡單的就倆用戶端直接對聊的程式。這個算是類比了真實的qq通訊原理(maybe),兩個用戶端並不直接通訊,而是通過伺服器進行轉寄。這個看圖就可以明白了。

 

 

 

 

      其中讓我比較感興趣的或者感到用的很巧的地方:

 

 

      第一個是關於進程的管理,每次都會把進程放到一個靜態hashMap中,每次通訊時只需要找到相應的線程就可以了,之所以覺得這裡比較新奇,是因為自己對於記憶體的認識不夠深刻吧,在我印象中,存放成檔案或者存放到資料庫中可能更好操作一下,並且這些資料庫都是靜態。不過換個思維,試想如果一個伺服器從來不關機,把資料存放在記憶體中,是不是也不會消失呀,(這確實是個問題,要是作業系統把記憶體中的資料覆蓋了呢,畢竟OS掌握了硬體的使用權,尤其是記憶體,個人理解)。

 

 

      這裡也有一個疑惑就是資料直接放在記憶體中是不安全的,不曉得人家“糗糗”公司是怎麼做的。當然了這些都不是我現在能夠考慮的地方了。繼續我的

 

 

      第二個就是介面類的操作,這裡一個比較典型的應用就是在一個後台類中直接使用一個介面類中的方法來完成介面自我更新的一個過程,這點很不容易想到。因為一直使用微軟拖拖拽拽的控制項來做介面,所有的訊息一般都是從介面發出,然後一點一點的往後發送。說一個讓我比較鬱悶的程式(因為看了這個視頻才感到鬱悶)。

 

 

      以前J2ME的課程設計我做的是一個《基於藍芽的貪吃蛇對戰遊戲》,在兩個用戶端進行通訊的時候為了保證介面能接受到對方的訊息,我直接在介面類中寫了個內部類,然後在裡面啟動線程,不斷的等待接收來自對方的訊息。記得當時的那個程式寫的很亂,其中最亂的就是介面接收訊息這塊了,現在比較明白了。想起一句話:別把介面不當類。

 

 

      其實這個裡面還有一個可以學習的地方就是通過socket串連資料庫,一般在區域網路直接可以通過程式中的串連資料庫字串,其實就是有資料庫提供的驅動串連到資料庫。以往我們的程式也是這麼做的,不過像這個仿“糗糗”程式,遠程沒有訪問資料庫的方法,而是通過socket,把訊息傳到服務端,有服務端進行資料庫的訪問,然後把訊息傳回。這也是個可以學習的地方吧。

 

 

      完成之後又用rose把裡面的類呀關係呀捋了一下,這樣可以分析的比較透徹。

在這個程式中我沒有實現串連資料庫的地方,不過應該串連的地方已經標註了。大家可以通過下面的連結下載我實現的這個qq源碼還有UML設計圖,大家相互交流,共同提高。

 

      源碼地址:http://dl5.csdn.net/fd.php?i=829827463229759&s=d6bd01eb23f9b5551006b79fd4abeacc

 

      這裡是視頻:

http://www.verycd.com/topics/2772159/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.