国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

nginx - 怎麼做到服務(wù)端收到http資料後主動(dòng)通知socket客戶端?
PHP中文網(wǎng)
PHP中文網(wǎng) 2017-05-16 17:06:59
0
3
748

是這樣的,我要操作一個(gè)智慧燈泡,目前是這樣做的,我在網(wǎng)頁上操作,然後把資料透過http提交存到資料庫,有一個(gè)客戶端發(fā)起一個(gè)socket連接,連接到服務(wù)端,服務(wù)端是死循環(huán)地從資料庫裡面取出資料給客戶端,每次操作後休眠一下,如果客戶端很多,例如10萬,我每秒就要查詢資料庫10W次,所以想改進(jìn),服務(wù)端收到http資料後,就立刻給客戶端,不需要存資料庫了。

PHP中文網(wǎng)
PHP中文網(wǎng)

認(rèn)證高級(jí)PHP講師

全部回覆(3)
世界只因有你

try yi try “websocket”
另外,不建議每次查詢都操作資料庫。你可以唸出來放到cache裡,每次查詢都直接從cache裡讀。 然後另外一個(gè)程序監(jiān)控到該值發(fā)生變化以後,修改資料庫的同時(shí),更新一下cache。

洪濤

可以考慮記憶體資料庫redis,然後定時(shí)持久化,也就是記憶體。

某草草

客戶端很多,為什麼要讀10w次?客戶端和伺服器長(zhǎng)連,服務(wù)端記憶體中保存一個(gè)映射:

map[client_id] = socket_fd

http提交存到資料庫,服務(wù)端死循環(huán)讀取資料庫信息,如果是發(fā)給某一個(gè)客戶端的,訊息中應(yīng)該包含客戶端的client_id,從map找到socket_fd,訊息發(fā)送出去就好了,如果是廣播到所有客戶端,遍歷map發(fā)送也就可以了。讀幾次資料庫,只跟訊息數(shù)量有關(guān)係,跟多少個(gè)客戶端沒關(guān)係吧。

上面說的資料庫,完全可以採用redis或nsq之類的訊息佇列實(shí)現(xiàn),服務(wù)端開多個(gè)執(zhí)行緒或協(xié)程並發(fā)處理就好了,如果部入庫,直接拿到資料send出去,如果你的服務(wù)端crash,數(shù)據(jù)不就丟了?可靠性沒辦法保證。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板