最近在做webrtc,其中的signaling server用workerman写的,客户端的长联也是用workerman写的,但是发现gateway连接数不平均,某个gateway承担了绝大部分的连接数,这是哪里问题呢?求帮助求解答。如图 [attach]577[/attach]
workerman里默认链接分配流程: 当客户端连上来时,客户端链接先被操作系统放到一个队列里,每个workerman子进程都能感知到队列里有新的链接,如果子进程这时候是空闲的,就会去队列里去获取这个新链接。反之如果子进程在忙(执行业务逻辑、发送数据等等)就不会去获取这个新链接。多个子进程都去获取这个链接,只会有一个进程成功。 所以在系统空闲并且连接数比较少的的情况下比较容易出现不太均匀的情况,但是不用担心,说明子进程能够处理这些链接,如果进程真的处理这些链接有些吃力时,也就是它比较繁忙时,链接会优先被连接数比较少或者比较空闲的进程认领,整个系统一直会保持一个比较均匀的分布。
如果想要连接数严格的被分配给各个进程,可以开启http://doc3.workerman.net/worker-development/reuse-port.html;,这样就是操作系统内核自动分配链接给个个进程,而不是每个进程去认领进程,这样每个进程获取的连接数就一样多了。gateway->reusePort这个特性需要PHP>=7.0。
workerman里默认链接分配流程:
当客户端连上来时,客户端链接先被操作系统放到一个队列里,每个workerman子进程都能感知到队列里有新的链接,如果子进程这时候是空闲的,就会去队列里去获取这个新链接。反之如果子进程在忙(执行业务逻辑、发送数据等等)就不会去获取这个新链接。多个子进程都去获取这个链接,只会有一个进程成功。
所以在系统空闲并且连接数比较少的的情况下比较容易出现不太均匀的情况,但是不用担心,说明子进程能够处理这些链接,如果进程真的处理这些链接有些吃力时,也就是它比较繁忙时,链接会优先被连接数比较少或者比较空闲的进程认领,整个系统一直会保持一个比较均匀的分布。
如果想要连接数严格的被分配给各个进程,可以开启http://doc3.workerman.net/worker-development/reuse-port.html;,这样就是操作系统内核自动分配链接给个个进程,而不是每个进程去认领进程,这样每个进程获取的连接数就一样多了。gateway->reusePort这个特性需要PHP>=7.0。