当前位置: 首页 > 工具软件 > IMI > 使用案例 >

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

戚同
2023-12-01

近日,有用户来问宇润,他用的是 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,
        ],
    ],
]

至此,问题顺利解决~

 类似资料: