解决 imi workerman gateway 服务端向客户端推送报错 send buffer full and drop package

近日,有用户来问宇润,他用的是 imiphp/imi-workerman-gateway。Workerman 作为网关和注册中心,Swoole 作为 Worker。

他的问题是,循环向客户端推送大量数据(大概几百K到几MB不等),在浏览器中只能收到前几次,后面的就收不到了。

Gateway 网关层还会报错:send buffer full and drop package

这个问题一般出现在,服务器循环发送数据给客户端,导致塞满发送缓冲区。

解决办法:

如果你是 Workerman,可以在入口文件中加上:

// 发送缓冲区大小,单位:字节。可以根据需要调整,不建议设置得很大,会浪费内存
\Workerman\Connection\TcpConnection::$defaultMaxSendBufferSize = 2 * 1024 * 1024;

如果你是 Workerman Gateway,可以在服务器配置中的 configs 加上相应配置:

[
    'gateway' => [
        'namespace'   => 'Imi\WorkermanGateway\Test\AppServer\Gateway',
        'type'        => Imi\WorkermanGateway\Workerman\Server\Type::GATEWAY,
        'socketName'  => 'websocket://0.0.0.0:8081', // 网关监听的地址
        'configs'     => [
            'lanIp'           => '127.0.0.1',
            'startPort'       => 12900,
            'registerAddress' => '127.0.0.1:13004',
            // 发送缓冲区大小,单位:字节。可以根据需要调整,不建议设置得很大,会浪费内存
            'sendToClientBufferSize' => 2 * 1024 * 1024,
        ],
    ],
]

至此,问题顺利解决~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值