請求響應日誌:
解決方法:
日誌可封裝可解析:
全鏈路可配置:
request
-header
中,因公司不同,可能使用的全鏈路唯一標誌不同。
有的公司用traceid
、而有的用request-id
,諸如此類的,如果都需要去改原始碼去完成,是否對生產的部署是一種障礙?
解決方法:
記錄的引數:請求方法,請求路由,請求引數(query,body;param收集的可能性不大?),作為乙個api端需要的token
或者其他authorization
資訊,響應時間,響應狀態(http status)
request
-header
中,因公司不同,可能使用的全鏈路唯一標誌不同。
有的公司用traceid
、而有的用request-id
,諸如此類的,如果都需要去改原始碼去完成,是否對生產的部署是一種障礙?
config.logger.level = 'none'
andconfig.logger.consolelevel = 'none'
它具有事件驅動,無阻塞,單執行緒等特性。
node提供了net,dgram,http,https這4個模組,分別用於處理tcp,udp,http,https,適用於伺服器端和客戶端。
構建tcp應用(傳輸控制協議)
tcp傳輸控制協議
七層:物理層(網路物理硬體),
資料鏈路層(網路特有的鏈路介面),
網路層(ip),
傳輸層(tcp/udp),
會話層(通訊連線/維持會話),
表示層(加密/解密等),
應用層(http,smtp,imap等)。
tcp:面向連線的協議,顯著特徵是傳輸之前需要3次握手形成會話。
在建立會話的過程中,伺服器端和客戶端分別提供乙個套接字,這兩個套接字共同形成乙個連線。伺服器端和客戶端通過套接字實現兩者之間連線的操作。
socket:套接字,使應用程式能夠讀寫與收發通訊協定與資料的程式。
tcp建立過程和鏈結折除過程是由tcp/ip協議棧自動建立的。tcp的套接字是可寫可讀的stream物件。
tcp服務事件:
伺服器事件,連線事件
tcp針對網路中的小資料報有一定的優化策略:nagle演算法.如果每次只傳送乙個位元組的內容而不優化,網路中將充滿只有少數有效資料的資料報,浪費網路資源。
nagle演算法針對這種情況,當緩衝區的資料達到一定數量或者一定時間後才將其發出,所以小資料寶將會被nagle演算法合併,以此來優化網路。這種優化雖然使網路頻寬被有效的使用,但是資料可能被延遲傳送。
構建udp服務 (使用者資料報協議)
乙個套接字可以與多個udp服務通訊。
提供平面向事務的簡單不可靠資訊傳輸入伍,在網路差的情況下存在丟包嚴重的問題。無需鏈結,資源消耗低,處理快速靈活。
構建http服務
傳輸層http,smtp
http:超文字傳輸協議
構建websocket服務
在websocket之前,網頁客戶端與伺服器端進行通訊最高效的是comet技術,實現comet技術的細節是採用長輪詢或iframe流,長輪詢的原理是客戶端向服務端發起請求,服務端只在超時或有資料相應時斷開連線,客戶端在收到資料或者超時後重新發起請求,這個請求行為拖長長的尾巴。
憑藉事件驅動和v8高效能,成為服務端額佼佼者。
無需切換語言環境,部分知識不會因為語言環境的切換而丟失,上下文一致性好。
資料(因為json)可以很好地實現跨前後端直接使用。
業務,可以輕量的選擇在前端還是在後端進行,語言相通,代價小。
請求方法的判斷,url的路徑解析,cookie的解析,basic認證,表單資料的解析,任意格式檔案的上傳處理。
basic認證:一種用來允許網頁瀏覽器或其他客戶端程式在請求時提供使用者名稱和口令形式的身份憑證的一種登入驗證方式
高階函式的介紹:可能無限的複雜,但是只要對總結果返回乙個上面的函式作為引數,傳遞給createserver()
偵聽器就好了
put代表乙個新建乙個資源,post表示更新乙個資源,get表示檢視乙個資源,delete表示刪除乙個資源。
效能的影響:一旦伺服器向客戶端附送了設定cookie的意圖,除非cookie過期,否則客戶端每次請求都會傳送這些cookie到服務端,cookie過多會導致報頭較大。
yslow效能規則:
減小cookie的大小
為靜態元件使用不同的網域名稱,將網域名稱轉換ip需要進行dns查詢,多乙個網域名稱就會多一次dns查詢
減少dns查詢
如何將每乙個客戶和伺服器中的資料一一對應起來:
基於cookie來實現使用者和資料的對映
伺服器開啟了session,將約定乙個鍵值作為session的口令,伺服器沒有檢查到使用者請求cookie中攜帶,將會生成乙個值唯一不重複,並設定超時時間。
通過查詢字串來實現瀏覽器和伺服器端資料的對應
node與快取服務保持長鏈結,而非頻繁的短連線,握手導致的延遲只影響初始化。
快取記憶體直接在記憶體中進行資料儲存和訪問。
快取服務通常與node程序執行在相同的機器上或者相同的機房裡,網路速度受到的影響較小。
session需要非同步的方式獲取。
將值通過私鑰簽名:
var
sign
=function
(val,secret)
;
新增expire或cache-control到報頭中
配置etags
讓ajax可快取
檢測本地資源是否可用會進行條件請求,在普通的get請求報文中附帶if-modified-since欄位。
如果伺服器沒有新的版本,響應乙個304的狀態碼,客戶端使用本地的版本。
如果伺服器有新的版本,將新的內容傳送給客戶端,客戶端放棄本地版本。
// 檢測本地資源是否可用
varhandle
=function
(req, res)
else);
}});
};
檔案的時間戳改動但內容不一定改動。
時間戳只能精確到秒,更新頻繁的內容將無法生效。
http/1.1 etag來解決。
每次發布,路徑中跟隨web應用的版本號。
每次發布,路徑中跟隨該檔案內容的hash值。
res.
setheader
('www-authenticate'
,'basic realm="secure area"'
);
var
hasbody
=function
(req)
// 流的方式處理data
function
(req, res));
req.on(
'end'
,function()
);}else
};
判斷content-type:
var mime=function(req)
解析xml檔案:
var xml2js=require('xml2js');
var handle = function(req,res)
req.body=xml;
todo(req,res);
})}}
接收大小未知的資料量的時候:
function (req,res)
parsejson(req,done);
par***ml(req,done);
}else if(mime(req)==='multipart/form-data')
}else
}
將req
這個流物件直接交給對應的解析方法,有解析方法自行處理上傳的內容,或接受內容儲存在記憶體中,或流式處理掉。
基於流式理解解析報文,將接收到的檔案寫入到系統的臨時資料夾,並返回對應的路徑
// formidable 基於流式處理解析報文
var formidable = require('formidable');
var upload = function (req, res) );
}} else
}
限制上傳內容的大小,一旦超過限制就停止接受資料,並相應400狀態碼。
通過流式解析,將資料流導向磁碟中,node只保留檔案路徑等小資料。
// 限制檔案的大小
var bytes = 1024;
var limit = function (req, res)
//limit
req.on('data', function (chunk)
});handle(req, res);
}
對於沒有content-length
的請求報文,在每個data事件中判斷即可,but,json檔案和xml檔案可能無法完成解析。
// 檢測
var validatecsrf = function (req, res) else
}// csrf新增
var generaterandom = function (len)
mvc模型的主要思想是將業務邏輯按職責分離
控制器模型
檢視工作模式:
路由解析,行為呼叫相關的模型進行資料操作,資料操作結束後呼叫檢視和相關資料進行頁面的渲染,輸出到客戶端。
構建web應用
請求方法的判斷 function req,res 路徑解析 http parser將路徑解析為req.url 客戶端 function req,res res.writehead 200 res.end file 查詢字串 node提供了querystring模組用於處理這部分資料 var url ...
Nodejs 構建web應用
本篇的內容比較多.1 首先是從基本的nodejs服務方面講述前後端統一語言在web應用中的作用 2 然後講了web中基本的知識,從請求方法到路由 從查詢字串到cookie和session以及快取 從表單資料到上傳檔案 以及安全認證。雖然不是很詳細,但總體上有個引領的效果。3 後面著重介紹了路由的概念...
web應用程式簡介
手機應用?電腦應用?我都不寫!我做的是瀏覽器訪問的程式,嘿嘿,也就是各大b s程式,各種 的後台 c s型別應用程式 client客戶端 server伺服器 客戶端必須安裝專門的乙個桌面軟體才能使用。優點 速度快,安全性高,客戶端比較強大 例如 qq,各種網路遊戲 b s型別應用程式 browser...