Heim > PHP-Framework > Workerman > Hauptteil

Laravel5.3 kombiniert mit Workerman (asynchron)

Freigeben: 2019-11-26 14:31:35
nach vorne
2739 Leute haben es durchsucht

In der folgenden Spalte des Tutorials zur Workerman-Nutzung wird Ihnen die Methode der gemeinsamen (asynchronen) Verwendung von Laravel5.3 und Workerman vorgestellt. Ich hoffe, dass es Freunden in Not hilfreich sein wird !

Laravel5.3 kombiniert mit Workerman (asynchron)

Wenn ich im Internet nach Informationen suche, gibt es fertige Composer-Komponenten, die sich mit Workerman kombinieren lassen, aber ich persönlich finde, dass sie nicht zuverlässig sind. Es gibt zu wenige Sterne Github, und es ist schwierig, es anzupassen, wenn es Probleme gibt. Ich wollte es einfach zuerst selbst ausprobieren.

Meine Methode erfordert zum Modifizieren ein wenig Workerman-Quellcode und führt direkt die Codedateien von Workerman ein, was sich etwas dürftig anfühlt, aber mein Talent ist begrenzt und mir ist keine bessere Methode dafür eingefallen vorerst.

Vorbereitung:

1 Sie müssen zunächst die Verwendung der Befehlszeile unter dem Laravel-Framework verstehen, siehe die chinesische Version des Tutorials

2 um die Grundkenntnisse von Workerman zu verstehen

Szenario: Nachdem sich der Benutzer registriert hat, senden Sie asynchron eine E-Mail-Erinnerung an den Benutzer

1 Platzieren Sie das Workerman-Framework im App-Verzeichnis

2. Erstellen Sie den Befehlscode:

php artisan make:command SendEmail
Nach dem Login kopieren
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();
    }
}
Nach dem Login kopieren

Oben Es ist der Workerman-Server. Starten Sie ihn mit der Befehlszeile:

php artisan send:email start
Nach dem Login kopieren
Nach dem Login kopieren

Zu diesem Zeitpunkt wird ein Fehler in der Befehlszeile gemeldet: Workerman [artisan] wird nicht ausgeführt. Der Grund dafür ist, dass Workerman den ersten Parameter artisan verwendet, um die Datei derzeit zu starten. Tatsächlich ist send:email die gewünschte Startdatei

Lösung: Ändern Sie den Parsing-Parametercode von Workerman

WorkermanWorkerman_LinuxWorker.php, ändern Sie die parseCommand-Methode (fügen Sie einfach 1 zu den Schlüsseln von $argv hinzu):

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

        if($argv[0] == 'artisan') // 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] : '';
        }
        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] : '';
        }
    
     // 只要略修改上面的参数解析部分即可 
     ..........................
}
Nach dem Login kopieren

Neustart OK:

php artisan send:email start
Nach dem Login kopieren
Nach dem Login kopieren

3. Der Server ist wie folgt fertig ist der Client-Code

Mein E-Mail-Operationscode wird als Ereignislogik verwendet, also schreiben Sie den Code für die Ereignis-Listener-Datei:

app\Listeners\SendMailEventListener.php:
Nach dem Login kopieren
rrree

4. Zusammenfassung der Schritte

Starten Sie die Server --- Registrieren Sie den Benutzer --- Lösen Sie das SendEmail-Ereignis aus --- Der Socket-Client schreibt Daten auf den Server --- E-Mails vom Server senden

Empfohlen: Workerman-Tutorial

Das obige ist der detaillierte Inhalt vonLaravel5.3 kombiniert mit Workerman (asynchron). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage