Я рад, что использую Pawl, и он работает для небольших файлов (например, 350 КБ).
Однако, когда я отправляю больший файл (скажем, 30 МБ) через $fullFileName
как показано ниже, я получаю эту ошибку: Connection closed (1009 - )
.
\Ratchet\Client\connect($url)->then(function(\Ratchet\Client\WebSocket $conn) use($contentType, $fullFileName) {
$conn->on('message', function($msg) use ($conn) {
Log::debug("Received: {$msg}");
});
$conn->on('close', function($code = null, $reason = null) {
Log::debug("Connection closed ({$code} - {$reason})");
});
$conn->send(json_encode([
'content-type' => $contentType,
'timestamps' => true,
'speaker_labels' => true,
'smart_formatting' => true,
'inactivity_timeout' => 60 * 5,
'x-watson-learning-opt-out' => true,
'action' => 'start'
]));
$frame = new \Ratchet\RFC6455\Messaging\Frame(file_get_contents($fullFileName), true, \Ratchet\RFC6455\Messaging\Frame::OP_BINARY);
$binaryMsg = new \Ratchet\RFC6455\Messaging\Message();
$binaryMsg->addFrame($frame);
$conn->send($binaryMsg);
$conn->send(json_encode([
'action' => 'stop'
]));
}, function ($e) {
echo "Could not connect: {$e->getMessage()}\n";
});
Когда я ищу использование Frame::CLOSE_TOO_BIG
, я вижу, что оно когда-либо использовалось только \Ratchet\RFC6455\Messaging\CloseFrameChecker
.
Но я не смог понять, как работает \Ratchet\RFC6455\Messaging\CloseFrameChecker
и каковы ограничения на размер файла и как отправлять большие файлы.
Я попытался сначала разбить мой файл на куски, используя str_split
изатем добавляю отдельные кадры, но затем я каждый раз бью тайм-ауты сессии, даже для небольших файлов.
Как правильно отправлять файлы большего размера, избегая ошибок Frame::CLOSE_TOO_BIG
1009 и времени ожидания сеанса?