用scoket做聊天程序,請(qǐng)求進(jìn)來,我把請(qǐng)求放入了隊(duì)列,代碼如下: rob_vest: async function (data, socket, io) {
console.log(type, '------------------------------------------') var queue = new Queue();//創(chuàng)建隊(duì)列
queue.push(data)//往隊(duì)列里放入請(qǐng)求數(shù)據(jù)
get_vetst(queue,socket, io)//這是從隊(duì)列取出數(shù)據(jù)
},
async function get_vetst(queue,socket, io) { // let sequlize = await db
let len = queue.size() if (len !== 0) { let data = queue.pop() //從對(duì)列取出數(shù)據(jù)
//下面是一些對(duì)數(shù)據(jù)的處理以及存庫(kù)操作
...
}
}想上面這樣寫如果下一次的請(qǐng)求依賴上一次的操作表的結(jié)果會(huì)導(dǎo)致出現(xiàn)預(yù)想之外的結(jié)果,雖然是放入到了隊(duì)列中,但是如果兩次請(qǐng)求同時(shí)進(jìn)來,還是會(huì)同時(shí)讀取兩次對(duì)列中的數(shù)據(jù),然后同時(shí)對(duì)表進(jìn)行操作,導(dǎo)致第二次的請(qǐng)求,沒有得到第一次的結(jié)果,理想的流程是,兩次請(qǐng)求進(jìn)來,把兩次的請(qǐng)求放入隊(duì)列,然后會(huì)觸發(fā)一個(gè)方法,這個(gè)方法讀取隊(duì)列中的數(shù)據(jù),當(dāng)?shù)谝淮巫x取并且執(zhí)行完一系列的操作后,在讀取下一個(gè)數(shù)據(jù)再進(jìn)行操作get_vetst方法不應(yīng)該依賴rob_vest我該如何操作??各位大佬們
1 回答

aluckdog
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
需要callback回傳ack確認(rèn)消息,參考amqp協(xié)議的消息確認(rèn)機(jī)制
- 1 回答
- 0 關(guān)注
- 1848 瀏覽
添加回答
舉報(bào)
0/150
提交
取消