nginx - 怎麼做到服務端收到http資料後主動通知socket客戶端?
PHP中文网
PHP中文网 2017-05-16 17:06:59
0
3
607

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

PHP中文网
PHP中文网

认证高级PHP讲师

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

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

洪涛

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

某草草

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

map[client_id] = socket_fd

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!