Gdb看了一下core 也搞不清哪里的問題。php版本是7.2.11
使用了kafka擴(kuò)展,memcache和memcached擴(kuò)展,linux已調(diào)優(yōu)。
追問一個問題,如果有某一個客戶端數(shù)據(jù)量很大,就算reusePort為true也不會平均分配給各個BusinessWorker,只會一直分配給一個進(jìn)程,對么? 如果業(yè)務(wù)中有數(shù)據(jù)庫操作,很可能出現(xiàn)busy的情況,是不是只能在開一個服務(wù)異步去處理,才能解決這類busy的問題。還是有更好的處理方法,謝謝~~~~
coredump 一般都是某個php擴(kuò)展的bug,或者某個php版本的bug。
reusePort 為true 會平均分配連接給進(jìn)程,并不會把連接上的請求分散到各個進(jìn)程。
gateway將消息轉(zhuǎn)發(fā)給businessWorker的路由默認(rèn)規(guī)則是:
Gateway隨機(jī)選擇一個BusinessWorker進(jìn)程,然后把當(dāng)前client_id與這個BusinessWorker進(jìn)程綁定,以后這個client_id的所有數(shù)據(jù)(onConnect/onMessage/onClose事件)都交給這個綁定的BusinessWorker進(jìn)程處理。你可以自己改成隨機(jī)分發(fā)給各個BusinessWorker進(jìn)程。具體參考手冊路由部分 http://doc2.workerman.net/router.html
如果是隨機(jī)路由的話,同一個客戶端的消息及事件處理可能會出現(xiàn)亂序,因為多個businessWorker進(jìn)程處理消息是并行的,并不容易保證順序,也不能保證哪個消息或者事件先處理完再處理下一個。
關(guān)于阻塞問題,不建議將復(fù)雜的業(yè)務(wù)邏輯寫在GatewayWorker框架里。最好將gatewayWorker當(dāng)作一個推送通道。在需要推送消息的時候調(diào)用。其它業(yè)務(wù)邏輯走其它框架。
參考手冊 http://doc2.workerman.net/work-with-other-frameworks.html