В моем приложении laravel 5.7 я использую MessageComponentInterface для приложения чата с классом, подобным
<code><?php
namespace App\Classes\Socket;
use App\Classes\Socket\Base\BaseSocket;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class ChatSocket extends BaseSocket
{
protected $clients;
public function __construct()
{
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
$this->clients->attach($conn);
echo '<pre>New Connection ::'.print_r($conn->resourceId,true).'
';} публичная функция onMessage (ConnectionInterface $ from, $ msg) {$ numRecv = count ($ this-> клиентов) -1;echo '
onMessage $msg::' . print_r( $msg, true ) ;
// var_dump($from);
dump($from);
die("-1 XXZ000");
echo '<pre>onMessage $from::' . print_r( $from, true ) ;
...
</code>
Проблема в том, что в событии onMessage я хочу, чтобы это сообщение записывалось в таблицу БД, но я не могу найти, где взять user_id пользователя, отправившего это сообщение?Я попытался отладить вывод значений на экран с помощью
echo '<pre>onMessage $from::' . print_r( $from, true ) ;
Но я получил ошибку памяти, но в /etc/php/7.2/cli/php.ini я изменил параметры:
max_execution_time = 3330
max_input_time = 240
memory_limit = 4048M
и перезапустил мой сервер, но все равно я получил ошибку памяти
, используя эти методы:
// var_dump($from);
dump($from);
Я получил бесконечный вывод в консоли, и я ничего не мог поймать ...
Как отладить эти значения?
ОБНОВЛЕНО # 2 Я пробую пример в https://laravel.io/forum/01-16-2015-loading-laravels-session-using-ratchet статье, но когда я попытался запустить его методом:
public function onMessage(ConnectionInterface $from, $msg) {
$from->session->start();
$idUser = $from->session->get(Auth::getName());
Я получил ошибку:
Undefined property: Ratchet\Server\IoConnection::$session
В упомянутой статье был комментарий:
(вы должны расшифровать cookie, чтобы получить идентификатор сеанса в Laravel 5):
Я ищу это, я нашел это
В контексте веб-запроса куки обычно автоматически шифруются и дешифруются промежуточным ПО EncryptCookies.Поэтому самым простым вариантом было бы просто включить это промежуточное ПО (и оно включено по умолчанию в Laravel).
и в моем приложении / Http / Kernel.php есть строка с EncryptCookies
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
но это веб-приложение, но я запускаю консольное приложение.Может ли причина ошибки в том, что мне нужно добавить EncryptCookies в какую-то другую группу в app / Http / Kernel.php?Или почему ошибка?
Также в файле: ///etc/php/7.2/cli/php.ini я изменил
memory_limit = 8048M
и перезапустил apache
также япопытался проверить, сколько памяти в моем скрипте:
echo '<pre>onMessage getNiceFileSize(memory_get_usage()) ::' . print_r( $this->getNiceFileSize(memory_get_usage()) , true ) ;
it shows :19241736 ~18 MiB
сообщение об ошибке:
Out of memory (allocated 1623195648) (tried to allocate 1600131072 bytes)
Я попытался вычислить и получил значения 1,51 ГиБ и 1,49 ГиБ ...
- 1) почему memory_get_usage возвращает такое маленькое значение 2) Почему дамп получает 1,5 ГиБ?Это большая ценность 3) Есть идеи, как с этим бороться?4) Auth :: id () ничего не возвращает, и, насколько я понимаю, это не поможет, так как сообщение может быть отправлено другим зарегистрированным пользователем, но в данный момент не зарегистрировано ...
Спасибо!