Scenario
服務(wù)器1:客戶端n 發(fā)送Notification給客戶端的處理
服務(wù)器端給第一個(gè)客戶端發(fā)送notification,然后在限定時(shí)間內(nèi),等待客戶端作出回應(yīng)—向服務(wù)器發(fā)送request。如果客戶端一直沒有回復(fù),服務(wù)器會(huì)在到達(dá)限定時(shí)間后,向第二個(gè)客戶端發(fā)送notification。如果客戶端在限定時(shí)間內(nèi)回復(fù),服務(wù)器端放棄再給其他客戶端發(fā)送消息。

Design
服務(wù)器、客戶端使用socket發(fā)送和接收信息
發(fā)送端存在一個(gè)客戶端列表,每次發(fā)送一給一個(gè)客戶端,發(fā)送后,向Helper發(fā)送添加該客戶端id的請(qǐng)求。
客戶端收到信息會(huì)向Helper發(fā)送刪除該id的請(qǐng)求。
Helper收到add時(shí),啟動(dòng)一個(gè)ScheduledExecutorService類的schedule,延時(shí)啟動(dòng)一個(gè)線程,并將該schedule緩存。remove時(shí),從緩存里取出schedule并停止它。如果在延時(shí)時(shí)間內(nèi),線程沒有被停止,它會(huì)被執(zhí)行:從緩存中取出,告訴服務(wù)器向下一個(gè)客戶端發(fā)送請(qǐng)求。
 UML



Code


SendingNotification

ReceivingRequest

Helper

Schedule

Client

IO