【发布时间】:2019-03-09 22:02:04
【问题描述】:
我很高兴能使用 Pawl,它可以处理小文件(例如 350 KB)。
但是,当我通过$fullFileName 发送一个更大的文件(例如,30 MB)时,如下所示,我收到此错误: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 错误和会话超时?
【问题讨论】:
标签: php websocket ratchet phpwebsocket