使用的是Gateway框架
用戶A通過ajax發(fā)送消息到php框架,php框架調用GateWayClient向用戶B發(fā)送消息
問題:
1、如果這時候用戶B的網(wǎng)絡不好,導致沒有收到這條消息,過一會網(wǎng)絡又好了,那么消息看起來就是缺失一截
2、如果使用回執(zhí),php框架向用戶B發(fā)送消息,用戶B收到消息后回發(fā)一條消息給服務端,那么,如果要實現(xiàn)消息的補發(fā)應該怎么做,難道每使用GateWayClient推送一條消息,都要做一個定時器?
?
每一條消息都存在數(shù)據(jù)庫里,每條消息都有個已讀未讀字段。
每條消息發(fā)到對方客戶端后客戶端給服務端發(fā)一個請求標記此消息已讀。
這樣就能知道哪些消息沒讀了,下一次登錄的時候或者網(wǎng)絡不好連接斷開重連時ajax請求一遍數(shù)據(jù)庫就知道哪些沒讀,拉過來顯示就好了
?
1、要發(fā)的消息加入數(shù)據(jù)庫, 2、定時查詢數(shù)據(jù)庫并發(fā)送消息, 3、客戶端收到消息后通知服務端把消息標為已讀
也可以使用全局變量保存每個用戶的“待發(fā)消息”,收到回執(zhí)后刪除對應消息
每次發(fā)消息的步驟如下:
1、將最新的消息加入此隊列;
2、從隊列的第一條開始發(fā)送(如果收到用戶的“回執(zhí)”,則對應消息會被從該隊列中刪除);
這樣可以保證消息不重復發(fā)送,也不丟失,如果有問題,再分析!