ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Coroutine\\Socket->listen [TOC] 监听`Socket`。 ~~~ function Coroutine\Socket->listen(int $backlog = 0) : bool; ~~~ * 此方法没有`IO`操作,不会引起协程切换 ## 参数 * `$backlog`:监听队列的长度,默认为`0`,系统底层使用`epoll`实现了异步`IO`,不存在阻塞,因此`backlog`的重要程度并不高 > 注意:如果应用中存在阻塞或耗时逻辑,`accept`接受连接不及时,新创建的连接就会堆积在`backlog`监听队列中,如超出`backlog`长度,服务就会拒绝新的连接进入 ## 内核参数 `backlog`的最大值受限于内核参数`net.core.somaxconn`, 而Linux中可以工具`sysctl`来动态调整所有的kernel参数。所谓动态调整就是内核参数值修改后即时生效。但是这个生效仅限于`OS`层面,必须重启应用才能真正生效, 命令`sysctl -a`会显示所有的内核参数及值。 ~~~ sysctl -w net.core.somaxconn=2048 ~~~ 以上命令将内核参数`net.core.somaxconn`的值改成了`2048`。这样的改动虽然可以立即生效,但是重启机器后会恢复默认值。为了永久保留改动,需要修改`/etc/sysctl.conf`,增加`net.core.somaxconn=2048`然后执行命令`sysctl -p`生效。 ## 返回值 * 监听成功返回`true` * 监听失败返回`false`,请检查`errCode`属性获取失败原因