phpsocket.io 單進程:
例如,當 客戶端A 請求過來,這個 客戶端A 在處理一些業(yè)務邏輯的時候(IO操作),客戶端B 在這個時候請求過來,是不是必須等 客戶端A 處理完后,客戶端B 才能在進行正常的請求操作,也就是說,這個中間會有阻塞。
gatewayworker 多進程:
例如,當 客戶端A 請求過來,客戶端A 處理一些業(yè)務邏輯(IO操作),這時候,其它客戶端請求過來,發(fā)現(xiàn)這個進程 客戶端A 在操作,就會去請求其它空閑進程吧。
以上我舉的例子符合 單進程和多進程 的思想嗎?如果不符合希望能舉例說明。
phpsocket.io 理解正確。
gatewayworker 有專門的gateway進程,gateway進程不做業(yè)務邏輯,只負責處理與客戶端的io,所以gateway可以處理大量連接,不會有阻塞情況。
gatewayworker里的businessworker是用來處理業(yè)務的,從單個businessworker進程來看,和phpsocket.io 單進程原理一樣。
如果一個businessworker進程在處理慢業(yè)務,那么分配給這個進程的其他業(yè)務請求也會排隊等待。但是某個進程阻塞,其他進程仍然可以處理請求。
phpsocket.io 和 gatewayworker都是用來處理通訊的,盡量不要在里面處理耗時的請求。耗時的請求可以通過異步任務來處理,參考 異步任務