phpsocket.io 寫了一個服務(wù)端 監(jiān)聽了幾個事件
事件都是查詢數(shù)據(jù)庫 數(shù)據(jù)不打
web端定時請求
幾十個人訪問就卡住了
lievent和 內(nèi)核都跳優(yōu)了
難道他這種單進(jìn)程,不能做耗時操作
可以 strace -p 進(jìn)程pid 看下進(jìn)程在干什么。
單進(jìn)程不適合做耗時操作,比如一個請求查數(shù)據(jù)庫耗時1秒,那么其它請求就會被阻塞等待,也就是這個進(jìn)程每秒只能處理一個請求。幾十個請求一同發(fā)過來,進(jìn)程要卡幾十秒。假設(shè)說每個查詢請求0.1秒就完成,那幾十個客戶端一起發(fā)來請求,進(jìn)程也要幾秒才能處理完,也會后卡住的現(xiàn)象。
解決辦法:
耗時的操作可以直接post給tp等mvc框架做,需要推送消息給客戶端的時候利用phpsocket.io推送。
推送可以參考web-msg-sender的做法,利用curl與phpsocket.io通訊,讓phpsocket.io推送數(shù)據(jù)。
這樣phpsocket.io里沒有任何阻塞的邏輯,linux內(nèi)核優(yōu)化好,libevent/event擴(kuò)展裝好,單進(jìn)程上萬個客戶端都可以應(yīng)付。