Maison > cadre php > Workerman > Laravel5.3 combiné avec Workerman (asynchrone)

Laravel5.3 combiné avec Workerman (asynchrone)

Libérer: 2019-11-26 14:31:35
avant
2779 Les gens l'ont consulté

La colonne suivante du tutoriel d'utilisation de Workerman vous présentera la méthode d'utilisation de Laravel5.3 et de Workerman ensemble (de manière asynchrone) pour les amis dans le besoin. !

Laravel5.3 combiné avec Workerman (asynchrone)

En recherchant des informations sur Internet, il existe des composants de compositeur prêts à l'emploi qui se combinent avec Workerman, mais j'ai personnellement l'impression qu'il n'est pas fiable. github, et il est difficile de l'ajuster s'il y a des problèmes. Je voulais juste l'essayer moi-même d'abord.

Ma méthode nécessite un peu de code source de Workerman pour être modifiée, et elle introduit directement les fichiers de code de Workerman, ce qui semble un peu faible, mais mon talent est limité et je n'ai pas pensé à une meilleure méthode pour le le moment étant.

Préparation :

1. Vous devez d'abord comprendre l'utilisation de la ligne de commande sous le framework Laravel, référez-vous à la version chinoise du tutoriel

2. pour comprendre les connaissances de base de Workerman

Scénario : Une fois l'utilisateur inscrit, envoyez un rappel par e-mail à l'utilisateur de manière asynchrone

1 Placez le framework Workerman dans le répertoire de l'application

. 2. Créez le code de commande :

php artisan make:command SendEmail
Copier après la connexion
namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Mail\Message;
use Workerman\Worker;

require app_path('Workerman/Workerman_Linux/Autoloader.php');

class SendEmail extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'send:email {action}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     */
    public function handle()
    {
        $mailWorker = new Worker('Text://0.0.0.0:12345');
        $mailWorker->count = 4;
        $mailWorker->name = 'MailWorker';
        $mailWorker->onMessage = function ($connection, $emailData) {
            $emailData = json_decode($emailData);
            $name = $emailData->name;
            $email = $emailData->to;
            Mail::raw('注册成功', function (Message $message) use ($email) {
                $message->to($email)->subject(trans('mail.welcome_register'));
            });

            // 写入日志
            Log::useFiles(storage_path() . '/logs/event.log', 'info');
            Log::info("{$name}({$email})注册成功");
        };

        Worker::runAll();
    }
}
Copier après la connexion

Ci-dessus C'est le serveur Workerman. Démarrez-le avec la ligne de commande :

php artisan send:email start
Copier après la connexion
Copier après la connexion

A ce moment, une erreur sera signalée sur la ligne de commande : Workerman. [artisan] ne s'exécute pas. La raison est que Workerman utilisera le premier paramètre artisan pour démarrer le fichier actuellement. En fait, send:email est le fichier de démarrage que nous voulons

Solution : modifier le code du paramètre d'analyse de Workerman <🎜. >

WorkermanWorkerman_LinuxWorker.php, modifiez la méthode parseCommand (ajoutez simplement 1 aux clés de $argv) :

/**
     * Parse command.
     * php yourfile.php start | stop | restart | reload | status
     *
     * @return void
     */
    protected static function parseCommand()
    {
        global $argv;

        if($argv[0] == &#39;artisan&#39;) // laravel框架下处理
        {
            // Check argv;
            $start_file = $argv[1];

            if (!isset($argv[2])) {
                exit("Usage: php yourfile.php {start|stop|restart|reload|status}\n");
            }

            // Get command.
            $command  = trim($argv[2]);
            $command2 = isset($argv[3]) ? $argv[3] : &#39;&#39;;
        }
        else
        {
            // Check argv;
            $start_file = $argv[0];
            if (!isset($argv[1])) {
                exit("Usage: php yourfile.php {start|stop|restart|reload|status}\n");
            }

            // Get command.
            $command = trim($argv[1]);
            $command2 = isset($argv[2]) ? $argv[2] : &#39;&#39;;
        }
    
     // 只要略修改上面的参数解析部分即可 
     ..........................
}
Copier après la connexion

Redémarrez OK :

php artisan send:email start
Copier après la connexion
Copier après la connexion

3 Le serveur est terminé, ce qui suit. est le code client

Mon code d'opération de messagerie est utilisé comme logique d'événement, donc dans Écrivez le code du fichier d'écoute d'événement :

app\Listeners\SendMailEventListener.php:
Copier après la connexion
rrree4 Étapes récapitulatives

Démarrez le. serveur---Enregistrer l'utilisateur---Déclencher l'événement SendEmail---le client socket écrit des données sur le serveur- --Envoi d'e-mails depuis le serveur

Recommandé :

Tutoriel Workerman

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal