walkor兄:
我在使用workerman-chat的過(guò)程中發(fā)現(xiàn),websocket是不能像傳統(tǒng)http一樣實(shí)現(xiàn)request-response的 那么我遇到一個(gè)很棘手的問(wèn)題希望walkor兄弟以及論壇內(nèi)其他的朋友可以幫助解決下。
問(wèn)題就是 聊天過(guò)程中的消息傳遞問(wèn)題(以前慚愧用的pomelo 里面send消息可以加回調(diào) websocket不能- -) 如下:
1:A 發(fā)送信息給 B
2:A的信息先發(fā)送到了服務(wù)器,服務(wù)器進(jìn)行數(shù)據(jù)的持久化等操作,那么此時(shí)如何做到讓A知道服務(wù)器已經(jīng)收到了他發(fā)給B的消息呢。
我想了幾種辦法感覺(jué)都是不是太好,一、Clien A 發(fā)送消息的時(shí)候進(jìn)行存儲(chǔ)當(dāng)前消息體的md5值 然后帶著md5值發(fā)送給服務(wù)器 ,服務(wù)器持久化以及其他操作完成后回復(fù)給A的時(shí)候也帶著md5值,但是這種就比較損耗性能。二、Client A 發(fā)送消息是帶著毫秒的時(shí)間戳,也就是說(shuō)a->b 消息時(shí) 我把毫秒時(shí)間戳也存到庫(kù)中 ,但是毫秒時(shí)間戳受制于客戶端的時(shí)間設(shè)置。
縱觀兩種方案都不太好。一個(gè)性能一個(gè)不是完全可靠。
1)client-A向im-server發(fā)送一個(gè)消息請(qǐng)求包,即msg:R
2)im-server在成功處理后,回復(fù)client-A一個(gè)消息響應(yīng)包,即msg:A
3)client-A和 im-server 需要有一個(gè)同意的msgid來(lái)確定是哪一條信息被服務(wù)器接受了- -就這樣的一個(gè)問(wèn)題
哦 對(duì)了- -我以前看過(guò)mqtt的qos機(jī)制 但是websocket 這種跟mqtt是兩個(gè)意思 。而且也看了所謂的ack機(jī)制,以及冪等概念。但是無(wú)從下手跪求大神們幫助
@walkor 報(bào)告下最新進(jìn)展。看了下簡(jiǎn)書(shū)的即時(shí)通訊 居然跳過(guò)了這個(gè)問(wèn)題?。?! 因?yàn)樗?jiǎn)書(shū)無(wú)恥的無(wú)恥的無(wú)恥的用的http請(qǐng)求發(fā)協(xié)議沒(méi)有用websocket ,websocket 在簡(jiǎn)書(shū)中只是用來(lái)推送和拉消息。。。。。。