Scenario
服務器1:客戶端n 發送Notification給客戶端的處理
服務器端給第一個客戶端發送notification,然后在限定時間內,等待客戶端作出回應—向服務器發送request。如果客戶端一直沒有回復,服務器會在到達限定時間后,向第二個客戶端發送notification。如果客戶端在限定時間內回復,服務器端放棄再給其他客戶端發送消息。

Design
服務器、客戶端使用socket發送和接收信息
發送端存在一個客戶端列表,每次發送一給一個客戶端,發送后,向Helper發送添加該客戶端id的請求。
客戶端收到信息會向Helper發送刪除該id的請求。
Helper收到add時,啟動一個ScheduledExecutorService類的schedule,延時啟動一個線程,并將該schedule緩存。remove時,從緩存里取出schedule并停止它。如果在延時時間內,線程沒有被停止,它會被執行:從緩存中取出,告訴服務器向下一個客戶端發送請求。
 UML



Code


SendingNotification

ReceivingRequest

Helper

Schedule

Client

IO