PHP Warning: stream_socket_client(): unable to connect to tcp://127.0.0.1:8282 (Cannot assign requested address) in /data/hsol_websocket/vendor/workerman/workerman/Connection/AsyncTcpConnection.php on line 173
Warning: stream_socket_client(): unable to connect to tcp://127.0.0.1:8282 (Cannot assign requested address) in /data/hsol_websocket/vendor/workerman/workerman/Connection/AsyncTcpConnection.php on line 173
服務(wù)器發(fā)起一個(gè)連接會(huì)占用一個(gè)本地端口,本地端口默認(rèn)配置為一般2-3w個(gè)(更改內(nèi)核net.ipv4.ip_local_port_range后可以達(dá)到6W左右),如果本地端口都占用完了就無(wú)法連接了,會(huì)報(bào)Cannot assign requested address。
也就是說(shuō)單個(gè)服務(wù)器默認(rèn)內(nèi)核配置向同一臺(tái)服務(wù)器最多能發(fā)起大概2-3W個(gè)連接,甚至可能更少。
另外連接斷開后連接變成TIME_WAIT狀態(tài),仍然會(huì)占用對(duì)應(yīng)本地端口一段時(shí)間,也就是短時(shí)間內(nèi)發(fā)起大量(超過(guò)2-3w)短連接也會(huì)報(bào)Cannot assign requested address,如果是這種情況可以通過(guò)設(shè)置內(nèi)核快速回收TIME_WAIT來(lái)解決,參考workemran手冊(cè) http://doc.workerman.net/315302 部分。
但是無(wú)論如何配置內(nèi)核,一臺(tái)服務(wù)器向另外一臺(tái)服務(wù)器維持的連接數(shù)不會(huì)超過(guò)6W。