Heim > Artikel > Web-Frontend > Nodejs erstellt einen Image-Server
Im modernen Webdesign, egal ob es sich um eine persönliche Website oder eine Unternehmenswebsite handelt, werden viele Bildressourcen benötigt. Daher ist die effiziente Speicherung und Verteilung dieser Bildressourcen zu einem der Probleme geworden, mit denen viele Website-Administratoren oder -Entwickler konfrontiert sind. In diesem Fall kann ein leistungsfähiger Bildserver das Problem lösen. In diesem Artikel wird erläutert, wie Sie mit NodeJS einen effizienten Bildserver erstellen.
Mit dem folgenden Code können wir einen einfachen Webserver erstellen:
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/'); });
Der obige Code verwendet die Methode createServer() im http-Modul, um einen Webserver zu erstellen. Die Zeichenfolge „Hello World!“ wird an den Client gesendet und verbleibt auf dem Client, bis der Server beendet wird.
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/'); });
Der obige Code verwendet das fs-Modul in Nodejs, um die Bilddatei im angegebenen Verzeichnis zu lesen und gibt dann die Binärdaten der Datei an den Client zurück. Wenn eine Nicht-Bild-Ressource angefordert wird, wird ein 404-Fehler zurückgegeben.
Das Folgende ist eine einfache Cache-Implementierung:
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/'); });
Der obige Code verwendet den LRU-Cache in Nodejs, um die Binärdaten von Bilddateien zwischenzuspeichern. Wenn mehrere Clients dasselbe Bild anfordern, muss der Server auf diese Weise die Bilddatei nur einmal lesen und zum Cache hinzufügen und sie bei nachfolgenden Anforderungen direkt aus dem Cache lesen, wodurch die Anzahl der Datei-E/A erheblich reduziert wird Anzahl der Operationen erhöht die Zugriffsgeschwindigkeit.
npm init npm install http fs path lru-cache --save node server.js
Unter diesen generiert der Befehl npm init ein Paket. json-Datei, und der Befehl npm install lädt alles herunter und installiert die erforderlichen abhängigen Bibliotheken, und der Befehl node server.js dient zum Ausführen des Image-Servers.
Es ist zu beachten, dass in einer tatsächlichen Produktionsumgebung Bilder oder andere statische Ressourcen auf unabhängigen Speichergeräten oder CDN-Knoten gespeichert werden müssen, um die Zugriffsgeschwindigkeit und Verfügbarkeit von Bildern zu verbessern.
Zusammenfassung:
In diesem Artikel wird erläutert, wie Sie mit NodeJS einen effizienten Bildserver erstellen, und es werden einige Methoden zur Leistungsoptimierung bereitgestellt. Ich hoffe, es hilft Entwicklern.
Das obige ist der detaillierte Inhalt vonNodejs erstellt einen Image-Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!