2
votes

Exception: Illuminate \ Broadcasting \ BroadcastException Aucun message dans PusherBroadcaster.php: 119

Laravel 5.8

Je suis nouveau dans toute cette fonctionnalité de poussoir et j'ai suivi ce tutoriel et l'ai essayé,

Créer des notifications Web à l'aide des canaux Laravel et Pusher .

Je l'ai suivi étape par étape et lorsque j'arrive à l'étape de tester manuellement l'événement en visitant l'url de test, je reçois l'exception suivante:

Illuminate \ Broadcasting \ BroadcastException Aucun message

C: \ wamp \ www \ ares \ vendor \ laravel \ framework \ src \ Illuminate \ Broadcasting \ Broadcasters \ PusherBroadcaster.php

Voici le code:

    $response = $this->pusher->trigger(
        $this->formatChannels($channels), $event, $payload, $socket, true
    );

    if ((is_array($response) && $response['status'] >= 200 && $response['status'] <= 299)
        || $response === true) {
        return;
    }

    throw new BroadcastException( // <-- Exception at this line
        is_bool($response) ? 'Failed to connect to Pusher.' : $response['body']
    );
}

/**
 * Get the Pusher SDK instance.
 *
 * @return \Pusher\Pusher
 */
public function getPusher()
{
    return $this->pusher;
}
}

J'ai regardé quelques autres articles de dépassement de pile qui parlent de changer encrypted: true code> à encrypted: false mais cela ne semble rien affecter.


2 commentaires

Pareil ici - des indices?


Quand je var_dump ($ response) il montre array (2) {["body"] => bool (false) ["status"] => int (0)} Donc il y a probablement quelque chose qui ne va pas avec tout le message


5 Réponses :


0
votes

Comme je l'ai mentionné dans un commentaire avant que cela ne se produise lorsque tout le message tourne mal et ne fournira pas de réponse. C'est pourquoi l'exception à la ligne 116 est levée. Je l'ai changé pour le domaine avant!

Dans mon cas, j'ai suivi le code et j'ai trouvé la méthode "createPusherDriver" dans "vendor / laravel / framework / src / Illuminate / Broadcasting / BroadcastManager.php". A cet endroit, j'ai inséré ceci

var_dump($config['key']);
var_dump($config['secret']);
var_dump( $config['app_id']);
var_dump($config['options']);
exit;

et j'ai remarqué que mes options étaient toujours répertoriées "host" => "localhost".

J'ai supprimé ces lignes et effacé le cache de configuration en exécutant php artisan config: cache

Lors du prochain rechargement, mon événement a été déclenché et enregistré dans la console.


0 commentaires

4
votes

J'ai commencé à travailler sur Laravel il y a 4 jours et je suis tombé sur le même problème lors de l'implémentation d'une application de chat en temps réel. Après plusieurs jours de recherche, j'ai découvert que cela pouvait varier en fonction de la version de Laravel que vous utilisez. Si c'est 5.8, vous pouvez résoudre ce problème en ajoutant le code suivant dans le tableau pusher.options du fichier config / broadcast.php:

'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'encrypted' => true,
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],
        ],
    ],

Après avoir ajouté ceci, votre tableau pusher dans la configuration /broadcasting.php devrait ressembler à ceci.

'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],

Vous pouvez ensuite exécuter php artisan config: cache (ce qui peut ne pas être nécessaire dans certains cas) et enfin lancez php artisan serve . Vous pouvez consulter votre application sur le site Web du pousseur et voir les événements que vous recevez après l'envoi de vos messages. J'espère que ça aide !!


1 commentaires

@Dharman merci pour le conseil! J'essayais de faire fonctionner cela, mais il s'est avéré que c'était un problème local que j'ai réussi à résoudre avec le lien que vous avez fourni. Comme j'utilise Forge pour gérer mon déploiement, la configuration SSL est déjà gérée par Forge, donc la connexion SSL fonctionne comme prévu sans avoir besoin de ces paramètres sur mon serveur. Merci encore.



0
votes

A parfaitement fonctionné jusqu'à ma version Laravel 5.8. Mais encrypted '=> true ou encrypted' => false n'avait pas d'importance dans ce cas pour une telle version de Laravel. Mais, suite aux suggestions de PUSHER, j'ai mis à la diffusion: 'useTLS' => true, .

Voici le résultat final pour moi:

'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'encrypted' => true,
            'useTLS' => true,
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],
        ]


0 commentaires

3
votes

Si vous travaillez sur localhost, essayez de configurer votre fichier .env.

Définissez:

php artisan config:cache

Et exécutez

APP_URL=http://localhost

DB_HOST=localhost


0 commentaires

0
votes

Merci à mon cher @Bitart

'useTLS' => true

l'option a résolu mon problème.

'options' => [
     'cluster' => env('PUSHER_APP_CLUSTER'),
     'useTLS' => true,
]


0 commentaires