首頁 >php框架 >Swoole >swoole都用在哪裡

swoole都用在哪裡

(*-*)浩
(*-*)浩原創
2019-12-06 14:10:342595瀏覽

swoole都用在哪裡

應用程式場景簡介

與硬體設備連接通訊(定位設備)

IM系統(用於直播頁面的聊天通訊)                (推薦學習: swoole視頻教程

場景1 - 實時收集定位數據實時輸出(例滴滴司機行駛軌跡)

說明:

需要將所有的定位裝置即時的接收,將即時的軌跡記錄顯示在地圖上

注意點:

第一點:

web1伺服器連線的使用者1,2,3,web1廣播訊息時只能廣播使用者1,2,3,不能廣播web2連線的用戶4,5,6,假設場景是聊天,用戶1發送一訊息,只有web1 伺服器的用戶能看到,web2的用戶全部不能收到

swoole都用在哪裡

# #第二點:訊息的頻率控制,例:100個設備,100個用戶, 100個設備每秒上傳一條數據,需要即時廣播給每個用戶,就是每秒要100*100 = 1W次,所以可以將每秒資料廣播給所有使用者等等方法

場景2 - 只收集定位裝置入庫

說明:需要把所有的定位裝置上傳的資料入庫,設備7個,每秒一條數據,個人使用swoole 的task 函數(投遞一個異步的任務到task_worker池中,此函數是非阻塞的, worker進程數同樣可以配置) 後調用接口方式入庫

伺服器記憶體警報問題

原因: 在於swoole_server->task 函數

官方介紹task底層使用Unix Socket管道通信,是全記憶體的,沒有IO消耗。單一進程讀寫效能可達100萬/s,不同的進程使用不同的管道通信,可最大化利用多核心。

但這任務如果是呼叫程式介面時,由於網路的延遲,增加的任務大於消費的任務時,記憶體佔用會持續的增加,導致伺服器的記憶體被佔滿。

解決方法:訊息針對入任務的頻率控制,可以根據自己的業務場景定義這個時間與是否可延遲等情況,匯總1秒內的所有資料再調用程式介面(匯總時個人使用redis ),最好能直接入庫,不必呼叫介面

場景-IM系統

#參考官方github: webim系統.

官方wiki: swoole 框架wiki

好處

封裝了資料庫的model類,資料庫的ORM介面

redis的封裝,可以實作多實例存取

框架有一些常用的方法,像是log 等等(我只用到了log)

webim 官方有demon,可以參考

以上是swoole都用在哪裡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn