鍍金池/ 問(wèn)答/PHP  網(wǎng)絡(luò)安全/ 電影選座,基于swoole時(shí)時(shí)更新數(shù)據(jù),這樣是否正確

電影選座,基于swoole時(shí)時(shí)更新數(shù)據(jù),這樣是否正確

描述:
1.用戶A訪問(wèn)選座頁(yè)面,和服務(wù)器建立連接,通知socket服務(wù)器,然后從數(shù)據(jù)庫(kù)拿到已購(gòu)買的座位ID,返回給客戶端,客戶端進(jìn)行座位鎖定。(此步驟之前是用ajax輪訓(xùn),現(xiàn)在打算換掉ajax用websocket)

2.用戶B選擇座位下單,此時(shí)新的訂單入庫(kù),用戶A的頁(yè)面如何更新座位數(shù)據(jù),是不是在用戶B下單后,并且訂單信息插入數(shù)據(jù)庫(kù)后,再去拿到當(dāng)前已經(jīng)和socket建立連接ID,然后推送座位信息。把剛剛購(gòu)買的座位推送給客戶端。

問(wèn)題:
我上面描述的并沒有涉及提交訂單15分鐘后如果沒有支付,那選擇的座位將被釋放。只是想先把socket這塊的邏輯走通,建立長(zhǎng)連接,時(shí)時(shí)更新座位信息,我上面這樣的邏輯正確嗎,如果不是這樣,煩請(qǐng)各位幫忙提供些思路呢。

回答
編輯回答
賤人曾

1.如果你需要在一個(gè)用戶夠票成功后讓所有同時(shí)在購(gòu)票頁(yè)面的用戶都無(wú)法點(diǎn)擊這個(gè)座位,那就需要在A用戶完成后光爆所有在線用戶這個(gè)座位已被購(gòu)買。
2.15分鐘的支付時(shí)間,可以給每個(gè)位置加個(gè)鎖,15分鐘的過(guò)期時(shí)間,用redis或者緩存都不難實(shí)現(xiàn)吧。

2018年6月16日 00:12
編輯回答
獨(dú)白

Swoole 應(yīng)該也有廣播事件,
之前用 workeman 做過(guò)
思路是:

用戶進(jìn)入選座 =>  用戶加入某個(gè)組(比如電影A組)
A用戶訂票 => 推送(廣播事件)推給電影A組 => B用戶接收到數(shù)據(jù)判斷是哪個(gè)座位(進(jìn)行鎖定操作)


2018年9月18日 10:29
編輯回答
孤慣

swoole搭建websocket服務(wù)端,用戶長(zhǎng)連接websocket,當(dāng)座位被選了,通知所有選這個(gè)座位的客戶端。

2017年11月20日 05:48
編輯回答
殘淚

swoole直接push數(shù)據(jù)給websocket客戶端就可以了,客戶端做好onmessage回調(diào)處理

2017年3月21日 14:17
編輯回答
鹿惑

已經(jīng)建立了長(zhǎng)連接了,就沒必要用ajax了。
另外可以用websocket,這個(gè)方便一點(diǎn)

2017年11月15日 14:16
編輯回答
小曖昧

已經(jīng)被選的座位,給當(dāng)前正在選這場(chǎng)電影的頁(yè)面廣播一下。

2018年6月25日 16:16
編輯回答
檸檬藍(lán)

都用swoole了還用什么ajax輪詢,有人選座位了,通知給該頁(yè)面的所有客戶端某個(gè)位置被選了,頁(yè)面數(shù)據(jù)更新一下(不是刷新)就行了。

2018年1月18日 12:13