


Detaillierte Erläuterung der Methode von Laravel zum Erstellen von Sofortanwendungen
Dieser Artikel stellt Ihnen hauptsächlich eine Implementierungsmethode zum Erstellen von Instant Messaging vor, die in unserer täglichen Entwicklung häufig vorkommt. Freunde, die es benötigen, können darauf zurückgreifen mit dem Herausgeber unten. Ich hoffe, es hilft allen.
Instant Interactive Applications
Jeder sollte erfahren haben, dass Instant Messaging in vielen Szenarien in modernen Webanwendungen benötigt wird, zum Beispiel am häufigsten Der Zahlungsrückruf steht im Zusammenhang mit der Anmeldung Dritter. Diese Geschäftsszenarien müssen grundsätzlich dem folgenden Prozess folgen:
Der Client löst zugehörige Geschäfte aus und generiert Drittanbieter-Anwendungsvorgänge (z. B. Zahlungen)
Der Client wartet auf das Antwortergebnis des Servers (der Benutzer schließt den Vorgang der Drittanbieteranwendung ab)
Die Drittanbieteranwendung benachrichtigt den Server über das Verarbeitungsergebnis (die Zahlung erfolgt). abgeschlossen)
-
Der Server benachrichtigt den Client über die Verarbeitungsergebnisse
Der Client gibt Feedback basierend auf den Ergebnissen (springt zur Zahlungserfolgsseite). )
Um diese Art der sofortigen Kommunikation zu erreichen und dem Kunden zu ermöglichen, richtig auf die Verarbeitungsergebnisse zu reagieren, war die Abfrage die am häufigsten verwendete Technologie Aufgrund der einseitigen Natur des HTTP-Protokolls konnte der Client den Server nur immer wieder aktiv nach den Verarbeitungsergebnissen fragen. Diese Methode weist offensichtliche Mängel auf und belegt nicht nur serverseitige Ressourcen, sondern kann auch keine serverseitigen Verarbeitungsergebnisse in Echtzeit erzielen.
Jetzt können wir das WebSocket-Protokoll verwenden, um Echtzeitinteraktionen abzuwickeln. Es ist ein Zwei-Wege-Protokoll, das es dem Server ermöglicht, aktiv Informationen an den Client zu übertragen. In diesem Artikel werden wir das leistungsstarke Ereignissystem von Laravel verwenden, um Echtzeitinteraktionen aufzubauen. Sie benötigen folgende Kenntnisse:
Laravel Event
Redis
Socket.io
Node.js
Redis
Bevor wir beginnen, wir Sie müssen einen Redis-Dienst öffnen und ihn in der Laravel-Anwendung konfigurieren und aktivieren, da wir während des gesamten Prozesses den Abonnement- und Veröffentlichungsmechanismus von Redis verwenden müssen, um Instant Messaging zu erreichen.
Redis ist ein Open-Source- und effizientes Schlüsselwertspeichersystem. Es wird normalerweise als Datenstrukturserver zum Speichern von Schlüssel-Wert-Paaren verwendet und kann Zeichenfolgen, Hashes, Listen, Mengen und geordnete Kombinationen unterstützen. Um Redis in Laravel verwenden zu können, müssen Sie die Paketdateien predis/predis über Composer installieren.
Konfiguration
Die Konfigurationsdatei von Redis in der Anwendung ist in config/database.php gespeichert. In dieser Datei sehen Sie a Das Redis-Array mit den Redis-Dienstinformationen:
'redis' => [ 'cluster' => false, 'default' => [ 'host' => '127.0.0.1', 'port' => 6379, 'database' => 0, ], ]
Wenn Sie den Port des Redis-Dienstes ändern, achten Sie darauf, dass der Port in der Konfigurationsdatei konsistent bleibt.
Laravel Event
Hier müssen wir die leistungsstarken Event-Übertragungsfunktionen von Laravel nutzen:
Broadcast Event
Viele moderne Anwendungen nutzen Web Sockets, um interaktive Echtzeit-Benutzeroberflächen zu implementieren. Wenn sich einige Daten auf dem Server ändern, wird eine Nachricht an den Client zur Verarbeitung über die WebSocket-Verbindung übermittelt.
Um Ihnen bei der Erstellung dieser Art von Anwendung zu helfen. Laravel erleichtert die Übertragung von Ereignissen über eine WebSocket-Verbindung. Mit Laravel können Sie Ereignisse übertragen, um den Ereignisnamen an Ihre serverseitigen und clientseitigen JavaScript-Frameworks weiterzugeben.
Konfiguration
Alle Event-Broadcast-Konfigurationsoptionen werden in der Konfigurationsdatei config/broadcasting.php gespeichert. Laravel wird mit mehreren verfügbaren Treibern wie Pusher, Redis und Log geliefert. Wir werden Redis als Broadcast-Treiber verwenden, der die Klassenbibliothek predis/predis erfordert.
Da der Standard-Broadcast-Treiber Pusher verwendet, müssen wir BROADCAST_DRIVER=redis
in der .env-Datei festlegen.
Wir erstellen eine WechatLoginedEvent-Ereignisklasse, die gesendet wird, nachdem der Benutzer WeChat gescannt hat, um sich anzumelden:
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class WechatLoginedEvent extends Event implements ShouldBroadcast { use SerializesModels; public $token; protected $channel; /** * Create a new event instance. * * @param string $token * @param string $channel * @return void */ public function __construct($token, $channel) { $this->token = $token; $this->channel = $channel; } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return [$this->channel]; } /** * Get the name the event should be broadcast on. * * @return string */ public function broadcastAs() { return 'wechat.login'; } }
Sie müssen beachten, dass die BroadcastOn-Methode ein Array zurückgeben sollte, das den Kanal darstellt gesendet werden, und BroadcastAs gibt eine Zeichenfolge zurück, die das durch die Übertragung ausgelöste Ereignis darstellt. Standardmäßig gibt Laravel den vollständigen Klassennamen der Ereignisklasse zurück.
Das Wichtigste ist, dass Sie dies tun müssen Lassen Sie die Klasse den ShouldBroadcast-Vertrag manuell implementieren. Laravel hat diesen Namespace beim Generieren von Ereignissen automatisch hinzugefügt, und dieser Vertrag schränkt nur die BroadcastOn-Methode ein.
Nachdem das Ereignis abgeschlossen ist, besteht der nächste Schritt darin, das Ereignis auszulösen. Eine einfache Codezeile reicht aus:
event(new WechatLoginedEvent($token, $channel));
Dieser Vorgang löst automatisch die Ausführung des Ereignisses und die Übertragung aus die Informationen. Der zugrunde liegende Broadcast-Vorgang basiert auf dem Abonnement- und Veröffentlichungsmechanismus von Redis.
RedisBroadcaster veröffentlicht die öffentlich zugänglichen Daten der Veranstaltung über den angegebenen Kanal. Wenn Sie mehr Kontrolle über die offengelegten Daten haben möchten, können Sie dem Ereignis die Methode „broadcastWith“ hinzufügen, die ein Array zurückgeben sollte:
/** * Get the data to broadcast. * * @return array */ public function broadcastWith() { return ['user' => $this->user->id]; }
Node.js und Socket.io
对于发布出去的信息,我们需要一个服务来对接,让其能对 redis 的发布能够进行订阅,并且能把信息以 WebSocket 协议转发出去,这里我们可以借用 Node.js 和 socket.io 来非常方便的构建这个服务:
// server.js var app = require('http').createServer(handler); var io = require('socket.io')(app); var Redis = require('ioredis'); var redis = new Redis(); app.listen(6001, function () { console.log('Server is running!') ; }); function handler(req, res) { res.writeHead(200); res.end(''); } io.on('connection', function (socket) { socket.on('message', function (message) { console.log(message) }) socket.on('disconnect', function () { console.log('user disconnect') }) }); redis.psubscribe('*', function (err, count) { }); redis.on('pmessage', function (subscrbed, channel, message) { message = JSON.parse(message); io.emit(channel + ':' + message.event, message.data); });
这里我们使用 Node.js 引入 socket.io 服务端并监听 6001 端口,借用 redis 的 psubscribe 指令使用通配符来快速的批量订阅,接着在消息触发时将消息通过 WebSocket 转发出去。
Socket.io 客户端
在 web 前端,我们需要引入 Socket.io 客户端开启与服务端 6001 端口的通讯,并订阅频道事件:
// client.js let io = require('socket.io-client') var socket = io(':6001') socket.on($channel + ':wechat.login', (data) => { socket.close() // save user token and redirect to dashboard })
至此整个通讯闭环结束,开发流程看起来就是这样的:
在 Laravel 中构建一个支持广播通知的事件
设置需要进行广播的频道及事件名称
将广播设置为使用 redis 驱动
提供一个持续的服务用于订阅 redis 的发布,及将发布内容通过 WebSocket 协议推送到客户端
客户端打开服务端 WebSocket 隧道,并对事件进行订阅,根据指定事件的推送进行响应。
相关推荐:
详解Laravel实现supervisor执行异步进程的方法
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Methode von Laravel zum Erstellen von Sofortanwendungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP und Flutter sind beliebte Technologien für die mobile Entwicklung. Flutter zeichnet sich durch plattformübergreifende Funktionen, Leistung und Benutzeroberfläche aus und eignet sich für Anwendungen, die eine hohe Leistung, plattformübergreifende und benutzerdefinierte Benutzeroberfläche erfordern. PHP eignet sich für serverseitige Anwendungen mit geringerer Leistung und nicht plattformübergreifend.

Datenbankoperationen in PHP werden durch ORM vereinfacht, das Objekte in relationalen Datenbanken abbildet. EloquentORM in Laravel ermöglicht Ihnen die Interaktion mit der Datenbank mithilfe einer objektorientierten Syntax. Sie können ORM verwenden, indem Sie Modellklassen definieren, Eloquent-Methoden verwenden oder in der Praxis ein Blog-System erstellen.

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Analyse des PHP-Unit-Test-Tools: PHPUnit: Geeignet für große Projekte, bietet umfassende Funktionalität und ist einfach zu installieren, kann jedoch ausführlich und langsam sein. PHPUnitWrapper: geeignet für kleine Projekte, einfach zu verwenden, optimiert für Lumen/Laravel, verfügt jedoch über eingeschränkte Funktionalität, bietet keine Code-Coverage-Analyse und hat begrenzte Community-Unterstützung.

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Leitfaden zum Testen von PHP-Einheiten und -Integrationen Unit-Tests: Konzentrieren Sie sich auf eine einzelne Code- oder Funktionseinheit und verwenden Sie PHPUnit, um Testfallklassen zur Überprüfung zu erstellen. Integrationstests: Achten Sie darauf, wie mehrere Codeeinheiten zusammenarbeiten, und verwenden Sie die Methoden setUp() und TearDown() von PHPUnit, um die Testumgebung einzurichten und zu bereinigen. Praktischer Fall: Verwenden Sie PHPUnit, um Unit- und Integrationstests in Laravel-Anwendungen durchzuführen, einschließlich der Erstellung von Datenbanken, dem Starten von Servern und dem Schreiben von Testcode.

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.
