Programmation réseau en TypeScript : des sockets aux WebSocket
\n\nQuand on parle de programmation réseau en TypeScript, on imagine souvent des systèmes distribués complexes, des chats en temps réel ou des serveurs de jeux. Et ce n'est pas un hasard : TypeScript, avec son typage strict et ses capacités d'analyse statique, rend le développement d'applications réseau non seulement sûr, mais aussi vraiment pratique.
\n\nDans cet article, nous allons voir comment créer des applications client-serveur en TypeScript en utilisant les modules intégrés de Node.js — net et dgram — ainsi que des bibliothèques pour travailler avec WebSocket. Vous obtiendrez des exemples de code prêts à l'emploi que vous pourrez immédiatement appliquer dans vos projets.
Pourquoi TypeScript pour la programmation réseau ?
\n\nDe nombreux développeurs ont l'habitude d'utiliser JavaScript pour le backend, mais la programmation réseau en TypeScript offre plusieurs avantages :
\n\n- \n
- Typage des données — vous définissez à l'avance la structure des paquets et des messages \n
- Auto-complétion — l'IDE suggère les méthodes des sockets et leurs paramètres \n
- Moins d'erreurs — le compilateur détecte les incohérences de types avant l'exécution \n
Regardons un exemple concret. Imaginez que nous écrivons un serveur TCP. En JavaScript, vous écririez :
\n\nconst server = require('net').createServer(socket => {\n socket.on('data', data => {\n // data est un Buffer, il faut s'en souvenir\n });\n});\n\nAvec TypeScript, nous obtenons des types clairs :
\n\nimport * as net from 'net';\n\nconst server: net.Server = net.createServer((socket: net.Socket) => {\n socket.on('data', (data: Buffer) => {\n // Le type Buffer est connu, on travaille en toute confiance\n });\n});\n\nCela semble un détail, mais sur de grands projets, cette différence permet d'économiser des heures de débogage.
\n\nLes bases : serveur et client TCP en TypeScript
\n\nCommençons par le classique — TCP. Créons un simple serveur echo qui renvoie au client ce qu'il a reçu.
\n\nServeur TCP
\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 connecté : ${socket.remoteAddress}:${socket.remotePort}`);\n\n socket.on('data', (data: Buffer) => {\n const message: string = data.toString().trim();\n console.log(`Reçu : ${message}`);\n socket.write(`Echo : ${message}\\n`);\n });\n\n socket.on('end', () => {\n console.log('Client déconnecté');\n });\n\n socket.on('error', (err: Error) => {\n console.error('Erreur de socket :', err.message);\n });\n});\n\nserver.listen(PORT, HOST, () => {\n console.log(`Serveur TCP démarré sur ${HOST}:${PORT}`);\n});\n\nRemarquez : nous avons typé toutes les variables — server, socket, data, err. Cela nous permet de voir quelles méthodes sont disponibles sur le socket et d'éviter des erreurs accidentelles.
Client TCP
\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('Connecté au serveur');\n client.write('Bonjour, serveur !');\n});\n\nclient.on('data', (data: Buffer) => {\n console.log('Réponse du serveur :', data.toString());\n client.destroy();\n});\n\nclient.on('close', () => {\n console.log('Connexion fermée');\n});\n\nCe code peut être exécuté dans n'importe quel projet Node.js avec TypeScript. Il suffit d'installer @types/node et de compiler.
UDP : quand la vitesse prime sur la fiabilité
\n\nSi vous devez transmettre des données sans établir de connexion (par exemple, pour le streaming ou les jeux), utilisez les sockets UDP en TypeScript. Le module dgram fournit tout le nécessaire.
Serveur UDP
\n\nimport * as dgram from 'dgram';\n\nconst server: dgram.Socke