大概看了下worker的源碼,感覺Worker似乎并沒有消息隊(duì)列,而是只有消息發(fā)送/接收緩沖,大概是1024*1024bye大小,如果這個(gè)緩沖滿了就處理不了接下來的發(fā)送或接收了吧!所以想確認(rèn)下,是不是沒有消息隊(duì)列的?自己不是100%確定,所以來求證下!
wokerman的IO通信部分沒有使用消息隊(duì)列,但是提供的網(wǎng)絡(luò)流量控制功能:
當(dāng)服務(wù)端發(fā)送速度快于客戶端接收速度或者客戶端停止接收時(shí),數(shù)據(jù)會(huì)積壓至服務(wù)端發(fā)送緩沖區(qū)直至爆滿并觸發(fā)onBufferFull事件【如果此時(shí)不加以處理繼續(xù)發(fā)送,那么發(fā)送緩沖區(qū)爆滿超過限值(TcpConnection::$maxSendBufferSize默認(rèn)1M)則會(huì)被丟棄,觸發(fā)onError事件(如果有的話),并導(dǎo)致send_fail計(jì)數(shù)加1】,此時(shí)服務(wù)端應(yīng)該暫停向客戶端發(fā)送數(shù)據(jù),直至發(fā)送緩沖區(qū)為空并觸發(fā)onBufferDrain事件,此時(shí)服務(wù)端恢復(fù)繼續(xù)向客戶端發(fā)送。