寫在前面:
昨天在博客記錄自己抽空寫的一個Socket聊天程序的初始設(shè)計(jì),那是這個程序的整體設(shè)計(jì),為了完整性,今天把服務(wù)端的設(shè)計(jì)細(xì)化記錄一下,首頁貼出Socket聊天程序的服務(wù)端大體設(shè)計(jì)圖,如下圖:
功能說明:
服務(wù)端主要有兩個操作,一是阻塞接收客戶端的socket并做響應(yīng)處理,二是檢測客戶端的心跳,如果客戶端一段時間內(nèi)沒有發(fā)送心跳則移除該客戶端,由Server創(chuàng)建ServerSocket,然后啟動兩個線程池去處理這兩件事(newFixedThreadPool,newScheduledThreadPool),對應(yīng)的處理類分別是SocketDispatcher、SocketSchedule,其中SocketDispatcher根據(jù)socket不同的請求分發(fā)給不同SocketHandler去處理,而SocketWrapper則是對socket加了一層外殼包裝,用lastAliveTime記錄socket最新的交互時間,SocketHolder存儲當(dāng)前跟服務(wù)端交互的socket集合。
具體實(shí)現(xiàn):
[Server.java]
Server是服務(wù)端的入口,由Server的start()方法啟動ServerSocket,然后阻塞接收客戶端的請求,交由SocketDispatcher去分發(fā),SocketDispatcher由newFixedThread類型的線程池啟動,當(dāng)連接數(shù)超過最大數(shù)據(jù)時將被隊(duì)列處理,使用scheduleAtFixedRate啟動SocketSchedule定時循環(huán)去監(jiān)聽客戶端的心跳包,這兩個類型都實(shí)現(xiàn)了Runnable接口,下面給出服務(wù)端的代碼:
網(wǎng)友評論