WebSocket mit JavaScript und Bun
Die Gewährleistung einer effizienten und nahtlosen Kommunikation zwischen Client und Server ist der Schlüssel zum Aufbau moderner Echtzeit-Webanwendungen. Herkömmliche HTTP-Anfragen – wie sie beim Polling verwendet werden – sind zustandslos und unidirektional. Der Client stellt eine Anfrage (z. B. mit Fetch oder Axios) an den Server und der Server antwortet, bevor die Verbindung geschlossen wird. Wenn der Client neue Daten benötigt, muss er in regelmäßigen Abständen wiederholt neue Anfragen senden, was zu unnötiger Latenz führt und die Belastung sowohl des Clients als auch des Servers erhöht.
Wenn Sie beispielsweise eine Live-Chat-App oder einen Aktienkurs-Tracker erstellen, müsste der Kunde bei Umfragen etwa jede Sekunde Aktualisierungen anfordern, selbst wenn keine neuen Daten abzurufen sind. Hier glänzen WebSockets.
Der WebSocket-Ansatz
WebSockets bieten einen persistenten, bidirektionalen Kommunikationskanal zwischen dem Client und dem Server. Sobald die Verbindung hergestellt ist, kann der Server Aktualisierungen sofort an den Client senden, ohne auf eine neue Anfrage warten zu müssen. Dies macht WebSockets ideal für Szenarien, in denen Echtzeit-Updates unerlässlich sind, wie zum Beispiel:
- Chat-Nachrichten in einer Live-Chat-Anwendung senden.
- Senden von Benachrichtigungen oder Aktualisierungen gleichzeitig an mehrere Benutzer.
- Streamen von Echtzeitdaten wie Aktienkursen, Sportergebnissen oder Spielständen.
Die Verwendung von Vanilla JavaScript auf der Clientseite und der Bun-Laufzeit auf der Serverseite macht die Implementierung von WebSockets einfach und effizient. Zum Beispiel:
- Der Client kann eine Nachricht an den Server senden, und der Server kann diese Nachricht sofort an andere verbundene Clients senden.
- Eine dauerhafte Verbindung gewährleistet, anders als beim Polling, keinen wiederholten Aufwand für die Wiederherstellung von Verbindungen.
In diesem Szenario bieten WebSockets eine geringere Latenz, eine geringere Serverlast und ein reibungsloseres Benutzererlebnis als herkömmliche Abfragemethoden.
Erstellen eines WebSocket-Projekts
Schritt 1: Einrichten eines Brötchenprojekts
Stellen Sie zunächst sicher, dass das Brötchen installiert ist. Erstellen Sie dann ein neues Bun-Projekt, erstellen Sie ein neues leeres Verzeichnis, geben Sie das neue Verzeichnis ein und initialisieren Sie das Projekt über den Bun-Init-Befehl:
mkdir websocket-demo cd websocket-demo bun init
Der Befehl bun init erstellt die Datei package.json, eine Datei „hello world“ index.ts, die Datei .gitignore, die Datei tsconfig.json für die Typescript-Konfiguration und eine Datei README.md.
Jetzt können Sie mit der Erstellung Ihres JavaScript-Codes beginnen. Ich zeige Ihnen das gesamte Drehbuch; Dann werden wir alle relevanten Teile erkunden. Sie können die Datei index.ts bearbeiten:
console.log("? Hello via Bun! ?"); const server = Bun.serve({ port: 8080, // defaults to $BUN_PORT, $PORT, $NODE_PORT otherwise 3000 fetch(req, server) { const url = new URL(req.url); if (url.pathname === "/") return new Response(Bun.file("./index.html")); if (url.pathname === "/surprise") return new Response("?"); if (url.pathname === "/chat") { if (server.upgrade(req)) { return; // do not return a Response } return new Response("Upgrade failed", { status: 400 }); } return new Response("404!"); }, websocket: { message(ws, message) { console.log("✉️ A new Websocket Message is received: " + message); ws.send("✉️ I received a message from you: " + message); }, // a message is received open(ws) { console.log("? A new Websocket Connection"); ws.send("? Welcome baby"); }, // a socket is opened close(ws, code, message) { console.log("⏹️ A Websocket Connection is CLOSED"); }, // a socket is closed drain(ws) { console.log("DRAIN EVENT"); }, // the socket is ready to receive more data }, }); console.log(`? Server (HTTP and WebSocket) is launched ${server.url.origin}`);
Dokumentieren des Codes für einen einfachen WebSocket-Server mit Bun
Nachfolgend finden Sie eine Aufschlüsselung des bereitgestellten Codes, in der jeder Teil und seine Funktionalität erläutert werden.
Serverinitialisierung
mkdir websocket-demo cd websocket-demo bun init
Die Bun.serve-Methode initialisiert einen Server, der sowohl HTTP- als auch WebSocket-Anfragen verarbeiten kann.
- Port: 8080: Gibt den Port an, auf dem der Server lauscht. Standardmäßig werden allgemeine Umgebungsvariablen oder 3000 verwendet, wenn keine Angabe erfolgt. In diesem Beispiel ist der Port fest auf 8080 codiert. Wenn Sie eine flexiblere Möglichkeit bieten möchten, sollten Sie die Portzeile entfernen und Bun die Verwaltung des Ports überlassen. Sie können das Skript also über export BUN_PORT=4321; ausführen. bun führen Sie index.ts aus
Behandlung von HTTP-Anfragen
console.log("? Hello via Bun! ?"); const server = Bun.serve({ port: 8080, // defaults to $BUN_PORT, $PORT, $NODE_PORT otherwise 3000 fetch(req, server) { const url = new URL(req.url); if (url.pathname === "/") return new Response(Bun.file("./index.html")); if (url.pathname === "/surprise") return new Response("?"); if (url.pathname === "/chat") { if (server.upgrade(req)) { return; // do not return a Response } return new Response("Upgrade failed", { status: 400 }); } return new Response("404!"); }, websocket: { message(ws, message) { console.log("✉️ A new Websocket Message is received: " + message); ws.send("✉️ I received a message from you: " + message); }, // a message is received open(ws) { console.log("? A new Websocket Connection"); ws.send("? Welcome baby"); }, // a socket is opened close(ws, code, message) { console.log("⏹️ A Websocket Connection is CLOSED"); }, // a socket is closed drain(ws) { console.log("DRAIN EVENT"); }, // the socket is ready to receive more data }, }); console.log(`? Server (HTTP and WebSocket) is launched ${server.url.origin}`);
- fetch(req, server): Verarbeitet eingehende HTTP-Anfragen.
- Root-Pfad /: dient der Datei index.html.
- /surprise path: Gibt eine lustige Überraschungs-Emoji-Antwort zurück?.
- /chat-Pfad: Versucht, die Verbindung auf eine WebSocket-Verbindung zu „aktualisieren“. Wenn das Upgrade fehlschlägt, wird eine Fehlerantwort 400 zurückgegeben.
WebSocket-Handler
Der WebSocket-Schlüssel definiert Ereignishandler zur Verwaltung von WebSocket-Verbindungen.
? Verbindung offen (offen)
const server = Bun.serve({ port: 8080, // defaults to $BUN_PORT, $PORT, $NODE_PORT otherwise 3000 ... });
Wird ausgelöst, wenn ein Client eine WebSocket-Verbindung aufbaut.
- ws.send(...): Sendet eine Willkommensnachricht an den Client, der die Verbindung angefordert hat..
✉️ Empfangen einer Nachricht (Nachricht)
fetch(req, server) { const url = new URL(req.url); if (url.pathname === "/") return new Response(Bun.file("./index.html")); if (url.pathname === "/surprise") return new Response("?"); if (url.pathname === "/chat") { if (server.upgrade(req)) { return; // do not return a Response } return new Response("Upgrade failed", { status: 400 }); } return new Response("404!"); }
Wird ausgelöst, wenn der Server eine Nachricht vom Client empfängt.
- ws.send(...): gibt die empfangene Nachricht mit einer Bestätigung zurück.
⏹️ Verbindung schließen (schließen)
open(ws) { console.log("? A new Websocket Connection"); ws.send("? Welcome baby"); }
Wird ausgelöst, wenn eine WebSocket-Verbindung geschlossen wird.
Parameter:
- Code: Grundcode für das Schließen der Verbindung.
- Nachricht: zusätzliche Details zur Schließung.
? Drain-Ereignis (Drain)
message(ws, message) { console.log("✉️ A new Websocket Message is received: " + message); ws.send("✉️ I received a message from you: " + message); }
Das Drain-Ereignis wird ausgelöst, wenn der WebSocket nach vorübergehender Überlastung bereit ist, mehr Daten zu akzeptieren.
Protokollieren Sie den Serverstart
close(ws, code, message) { console.log("⏹️ A Websocket Connection is CLOSED"); }
Protokolliert die URL des Servers in der Konsole, sobald er ausgeführt wird.
Fassen Sie noch einmal zusammen, wie es funktioniert
- HTTP-Anfragen: Verarbeitet Standard-HTTP-Anfragen (z. B. Bereitstellung einer Datei oder Antwort mit einem Status).
- WebSocket-Upgrade: Aktualisiert HTTP-Verbindungen auf WebSocket-Verbindungen, wenn Clients eine Verbindung zu /chat herstellen.
- Echtzeitkommunikation: Verwaltet die dauerhafte Kommunikation zwischen dem Server und den Clients mithilfe von WebSocket-Ereignissen (Öffnen, Nachricht, Schließen, Entleeren).
Ausführen des Servers
Sobald Sie Ihre index.ts-Datei haben, können Sie den Server über bun run starten:
drain(ws) { console.log("DRAIN EVENT"); }
Der Server ist bereit und betriebsbereit. Jetzt können wir den Client implementieren.
Nächste Schritte
Jetzt verstehen wir die Struktur des Skripts zur Handhabung des WebSocket. Die nächsten Schritte sind:
- Implementieren des HTML für den WebSocket-Client;
- Implementierung der Broadcasting-Logik, um Nachrichten von einem Client an alle verbundenen Clients weiterzuleiten.
Das obige ist der detaillierte Inhalt vonWebSocket mit JavaScript und Bun. 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

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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











Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.
