標籤:
什麼是 Web 服務器?
Web伺服器一般指網站伺服器,是指駐留於網際網路上某種類型電腦的程式,Web伺服器的準系統就是提供Web資訊瀏覽服務。它只需支援HTTP協議、HTML文檔格式及URL,與用戶端的網路瀏覽器配合。
大多數 網頁伺服器都支援服務端的指令碼語言(php、python、ruby)等,並通過指令碼語言從資料庫擷取資料,將結果返回給用戶端瀏覽器。
目前最主流的三個Web伺服器是Apache、Nginx、IIS。
Web 應用程式架構
Client - 用戶端,一般指瀏覽器,瀏覽器可以通過 HTTP 協議向伺服器請求資料。
Server - 服務端,一般指 Web 服務器,可以接收用戶端請求,並向用戶端發送響應資料。
Business - 業務層, 通過 Web 服務器處理應用程式,如與資料庫互動,邏輯運算,調用外部程式等。
Data - 資料層,一般由資料庫組成。
使用 Node 建立 Web 服務器
Node.js 提供了 http 模組,http 模組主要用於搭建 HTTP 服務端和用戶端,使用 HTTP 伺服器或用戶端功能必須調用 http 模組,代碼如下:
var http = require(‘http‘);
以下是示範一個最基本的 HTTP 伺服器架構(使用8081連接埠),建立 server.js 檔案,代碼如下所示:
var http = require(‘http‘);var fs = require(‘fs‘);var url = require(‘url‘);// 建立伺服器http.createServer( function (request, response) { // 解析請求,包括檔案名稱 var pathname = url.parse(request.url).pathname; // 輸出請求的檔案名稱 console.log("Request for " + pathname + " received."); // 從檔案系統中讀取請求的檔案內容 fs.readFile(pathname.substr(1), function (err, data) { if (err) { console.log(err); // HTTP 狀態代碼: 404 : NOT FOUND // Content Type: text/plain response.writeHead(404, {‘Content-Type‘: ‘text/html‘}); }else{ // HTTP 狀態代碼: 200 : OK // Content Type: text/plain response.writeHead(200, {‘Content-Type‘: ‘text/html‘}); // 回應檔內容 response.write(data.toString()); } // 發送響應資料 response.end(); }); }).listen(8081);// 控制台會輸出以下資訊console.log(‘Server running at http://127.0.0.1:8081/‘);
接下來我們在該目錄下建立一個 index.htm 檔案,代碼如下:
<html><head><title>Sample Page</title></head><body>Hello World!</body></html>
執行 server.js 檔案:
$ node server.jsServer running at http://127.0.0.1:8081/
接著我們在瀏覽器中開啟地址:http://127.0.0.1:8081/index.htm,顯示如所示:
執行 server.js 的控制台輸出資訊如下:
Server running at http://127.0.0.1:8081/Request for /index.htm received. # 用戶端請求資訊
使用 Node 建立 網頁用戶端
Node 建立 網頁用戶端需要引入 http 模組,建立 client.js 檔案,代碼如下所示:
var http = require(‘http‘);// 用於請求的選項var options = { host: ‘localhost‘, port: ‘8081‘, path: ‘/index.htm‘ };// 處理響應的回呼函數var callback = function(response){ // 不斷更新資料 var body = ‘‘; response.on(‘data‘, function(data) { body += data; }); response.on(‘end‘, function() { // 資料接收完成 console.log(body); });}// 向服務端發送請求var req = http.request(options, callback);req.end();
新開一個終端,執行 client.js 檔案,輸出結果如下:
$ node client.js<html><head><title>Sample Page</title></head><body>Hello World!</body></html>
執行 server.js 的控制台輸出資訊如下:
Server running at http://127.0.0.1:8081/Request for /index.htm received. # 用戶端請求資訊
Node.js Web 模組