Netzwerkprogrammierung mit TypeScript: Von Sockets bis WebSocket
\n\nWenn wir über Netzwerkprogrammierung mit TypeScript sprechen, stellen wir uns oft komplexe verteilte Systeme, Echtzeit-Chats oder Spieleserver vor. Und das ist kein Zufall: TypeScript mit seiner strengen Typisierung und den Möglichkeiten der statischen Analyse macht die Entwicklung von Netzwerkanwendungen nicht nur sicher, sondern auch wirklich komfortabel.
\n\nIn diesem Artikel werden wir uns ansehen, wie man Client-Server-Anwendungen mit TypeScript erstellt, unter Verwendung der integrierten Node.js-Module net und dgram sowie Bibliotheken für die Arbeit mit WebSocket. Sie erhalten fertige Codebeispiele, die Sie sofort in Projekten einsetzen können.
Warum TypeScript für Netzwerkprogrammierung?
\n\nViele Entwickler sind es gewohnt, JavaScript für das Backend zu verwenden, aber TypeScript Netzwerkprogrammierung bietet eine Reihe von Vorteilen:
\n\n- \n
- Datentypisierung — Sie definieren im Voraus die Struktur von Paketen und Nachrichten \n
- Autovervollständigung — die IDE schlägt Socket-Methoden und deren Parameter vor \n
- Weniger Fehler — der Compiler fängt Typenkonflikte bereits vor dem Start ab \n
Schauen wir uns ein reales Beispiel an. Stellen Sie sich vor, wir schreiben einen TCP-Server. In JavaScript würden Sie schreiben:
\n\nconst server = require('net').createServer(socket => {\n socket.on('data', data => {\n // data ist ein Buffer, das muss man bedenken\n });\n});\n\nIn TypeScript erhalten wir dagegen klare Typen:
\n\nimport * as net from 'net';\n\nconst server: net.Server = net.createServer((socket: net.Socket) => {\n socket.on('data', (data: Buffer) => {\n // Der Typ Buffer ist bekannt, wir arbeiten sicher\n });\n});\n\nDas scheint eine Kleinigkeit zu sein, aber bei großen Projekten spart dieser Unterschied Stunden des Debuggens.
\n\nGrundlagen: TCP-Server und -Client mit TypeScript
\n\nBeginnen wir mit dem Klassiker — TCP. Wir erstellen einen einfachen Echo-Server, der dem Client das zurückgibt, was er erhalten hat.
\n\nTCP-Server
\n\nimport * as net from 'net';\n\nconst PORT: number = 3000;\nconst HOST: string = '127.0.0.1';\n\nconst server: net.Server = net.createServer((socket: net.Socket) => {\n console.log(`Client verbunden: ${socket.remoteAddress}:${socket.remotePort}`);\n\n socket.on('data', (data: Buffer) => {\n const message: string = data.toString().trim();\n console.log(`Empfangen: ${message}`);\n socket.write(`Echo: ${message}\\n`);\n });\n\n socket.on('end', () => {\n console.log('Client getrennt');\n });\n\n socket.on('error', (err: Error) => {\n console.error('Socket-Fehler:', err.message);\n });\n});\n\nserver.listen(PORT, HOST, () => {\n console.log(`TCP-Server gestartet auf ${HOST}:${PORT}`);\n});\n\nBeachten Sie: Wir haben alle Variablen typisiert — server, socket, data, err. Dies ermöglicht es uns zu sehen, welche Methoden für den Socket verfügbar sind, und versehentliche Fehler zu vermeiden.
TCP-Client
\n\nimport * as net from 'net';\n\nconst client: net.Socket = new net.Socket();\n\nclient.connect(3000, '127.0.0.1', () => {\n console.log('Mit Server verbunden');\n client.write('Hallo, Server!');\n});\n\nclient.on('data', (data: Buffer) => {\n console.log('Serverantwort:', data.toString());\n client.destroy();\n});\n\nclient.on('close', () => {\n console.log('Verbindung geschlossen');\n});\n\nDieser Code kann in jedem Node.js-Projekt mit TypeScript ausgeführt werden. Installieren Sie einfach @types/node und kompilieren Sie.
UDP: Wenn Geschwindigkeit wichtiger ist als Zuverlässigkeit
\n\nWenn Sie Daten ohne Verbindungsaufbau übertragen müssen (z. B. für Streaming oder Spiele), verwenden Sie UDP Sockets TypeScript. Das Modul dgram bietet alles Notwendige.
UDP-Server
\n\nimport * as dgram from 'dgram';\n\nconst server: dgram.Socke