gpt4 book ai didi

laravel-5 - 内存不足错误字符串调试 MessageComponentInterface 方法变量

转载 作者:行者123 更新时间:2023-12-03 17:31:24 25 4
gpt4 key购买 nike

在我的 Laravel 5.7 应用程序中,我将 MessageComponentInterface 用于聊天应用程序,其类为

<?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).'</pre>';
}

public function onMessage(ConnectionInterface $from, $msg) {
$numRecv= count($this->clients)-1;
echo '<pre>onMessage $msg::' . print_r( $msg, true ) ;
// var_dump($from);
dump($from);
die("-1 XXZ000");
echo '<pre>onMessage $from::' . print_r( $from, true ) ;
...

问题是在 onMessage 事件中我想将此消息写入 db 表,但我找不到从哪里获取用户的 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

在提到的文章中有一条评论:

(you must decrypt cookie to get the session id in Laravel 5) :



我搜索这个我找到了这个

In web request context cookies are usually automatically encrypted and decrypted by the EncryptCookies middleware. So easiest option would be just to enable this middleware (and it's enabled by default in Laravel).



在我的 app/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 GiB 和 1.49 GiB ...
  • 1) 为什么 memory_get_usage 返回这么小的值 2) 为什么转储得到
    1.5GiB?这是一个很大的值(value) 3) 任何想法如何处理它? 4) Auth::id() 什么都不返回,据我所知它无济于事,
    因为消息可以由其他登录的用户发送,但目前不能
    已登录...

  • 谢谢!

    最佳答案

    你看到了吗https://laravel.io/forum/01-16-2015-loading-laravels-session-using-ratchet文章 ?
    它有类似的例子:

    public function onMessage(ConnectionInterface $from, $msg) {
    // start the session when the user send a message
    // (refreshing it to be sure that we have access to the current state of the session)
    $from->session->start();
    // do what you wants with the session
    // for example you can test if the user is auth and get his id back like this:
    $idUser = $from->session->get(Auth::getName());
    if (!isset($idUser)) {
    echo "the user is not logged via an http session";
    } else {
    $currentUser = User::find($idUser);
    }
    // or you can save data to the session
    $from->session->put('foo', 'bar');
    // ...
    // and at the end. save the session state to the store
    $from->session->save();
    }

    关于laravel-5 - 内存不足错误字符串调试 MessageComponentInterface 方法变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467276/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com