Maison >interface Web >Questions et réponses frontales >Nodejs construit un serveur d'images
Dans la conception de sites Web modernes, qu'il s'agisse d'un site Web personnel ou d'un site Web d'entreprise, un grand nombre de ressources d'images sont nécessaires. Par conséquent, comment stocker et distribuer efficacement ces ressources d’images est devenu l’un des problèmes auxquels de nombreux administrateurs ou développeurs de sites Web doivent faire face. Dans ce cas, un serveur d’images efficace peut résoudre le problème. Cet article explique comment utiliser nodejs pour créer un serveur d'images efficace.
Nous pouvons créer un serveur Web simple grâce au code suivant :
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World!'); res.end(); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000/'); });
Le code ci-dessus utilise la méthode createServer() dans le module http pour créer un serveur Web Lorsqu'un client se connecte au serveur, le serveur ". La chaîne Hello World!" est envoyée au client et reste sur le client jusqu'à la fin du serveur.
const http = require('http'); const fs = require('fs'); const path = require('path'); const server = http.createServer((req, res) => { // 获取请求文件的后缀名 const extname = path.extname(req.url); // 如果后缀名是.jpg或.png if (extname === '.jpg' || extname === '.png') { // 读取文件 fs.readFile('./images' + req.url, (err, data) => { if (err) { // 文件不存在,返回404错误 res.writeHead(404, {'Content-Type': 'text/plain'}); res.write('404 Not Found'); res.end(); } else { // 返回文件内容 res.writeHead(200, {'Content-Type': 'image/jpeg'}); res.write(data); res.end(); } }); } else { // 请求的不是图片,返回404错误 res.writeHead(404, {'Content-Type': 'text/plain'}); res.write('404 Not Found'); res.end(); } }); server.listen(3000, () => { console.log('Server running at http://localhost:3000/'); });
Le code ci-dessus utilise le module fs dans Nodejs pour lire le fichier image dans le répertoire spécifié, puis renvoie les données binaires du fichier au client. Si une ressource non-image est demandée, une erreur 404 sera renvoyée.
Ce qui suit est une implémentation simple du cache :
const http = require('http'); const fs = require('fs'); const path = require('path'); const LRU = require('lru-cache'); const cacheOptions = { max: 500, // 最多缓存500个对象 length: (n, key) => n * 2 + key.length, // 缓存对象的大小 dispose: (key, n) => n.close(), // 执行垃圾回收 maxAge: 1000 * 60 * 60 // 缓存1小时 }; const imgCache = new LRU(cacheOptions); const server = http.createServer((req, res) => { // 获取请求文件的后缀名 const extname = path.extname(req.url); // 如果后缀名是.jpg或.png if (extname === '.jpg' || extname === '.png') { // 检查缓存中是否已经有该文件的缓存 const imgData = imgCache.get(req.url); if (imgData) { // 直接从缓存中返回文件的二进制数据 res.writeHead(200, {'Content-Type': `image/${extname.slice(1)}`}); res.write(imgData, 'binary'); res.end(); } else { // 如果缓存中没有该文件的缓存,则读取文件并将其添加到缓存中 fs.readFile('./images' + req.url, 'binary', (err, data) => { if (err) { // 文件不存在,返回404错误 res.writeHead(404, {'Content-Type': 'text/plain'}); res.write('404 Not Found'); res.end(); } else { // 返回文件内容 res.writeHead(200, {'Content-Type': `image/${extname.slice(1)}`}); res.write(data, 'binary'); res.end(); // 将文件数据添加到缓存中 imgCache.set(req.url, data); } }); } } else { // 请求的不是图片,返回404错误 res.writeHead(404, {'Content-Type': 'text/plain'}); res.write('404 Not Found'); res.end(); } }); server.listen(3000, () => { console.log('Server running at http://localhost:3000/'); });
Le code ci-dessus utilise le cache LRU dans Nodejs pour mettre en cache les données binaires des fichiers image. De cette façon, lorsque plusieurs clients demandent la même image, le serveur n'a besoin de lire le fichier image qu'une seule fois et de l'ajouter au cache, et de le lire directement à partir du cache lors des requêtes ultérieures, réduisant ainsi considérablement le nombre d'E/S de fichier. des opérations augmente la vitesse d’accès.
npm init npm install http fs path lru-cache --save node server.js
Parmi elles, la commande npm init générera un package. json et la commande npm install téléchargera et installera tout. Les bibliothèques dépendantes requises sont requises et la commande node server.js consiste à exécuter le serveur d'images.
Il convient de noter que dans un environnement de production réel, les images ou autres ressources statiques doivent être stockées dans des périphériques de stockage indépendants ou des nœuds CDN pour améliorer la vitesse d'accès et la disponibilité des images.
Résumé :
Cet article explique comment utiliser nodejs pour créer un serveur d'images efficace et fournit quelques méthodes d'optimisation des performances. J'espère que cela aide les développeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!