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 !
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
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(); } }
Oben Es ist der Workerman-Server. Starten Sie ihn mit der Befehlszeile:
php artisan send:email start
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] : ''; } // 只要略修改上面的参数解析部分即可 .......................... }
Neustart OK:
php artisan send:email start
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:
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!