国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Node核心模塊HTTP】

figofuture / 1945人閱讀

摘要:比如,大塊編碼的消息。這些接口不緩沖完整的請求或響應(yīng),用戶能夠以流的形式處理數(shù)據(jù)。它只涉及流處理與消息解析。結(jié)構(gòu)圖由于該模塊中的內(nèi)容比較多,圖片我就分開傳了,避免一張圖密密麻麻的。請求遇到問題寫入數(shù)據(jù)到請求主體

環(huán)境:Node v8.2.1; Npm v5.3.0; OS Windows10
客戶端、服務(wù)端對我們都不陌生,Node.js 中的 HTTP 接口被設(shè)計成支持協(xié)議的許多特性。 比如,大塊編碼的消息。 這些接口不緩沖完整的請求或響應(yīng),用戶能夠以流的形式處理數(shù)據(jù)。

為了支持各種可能的 HTTP 應(yīng)用,Node.js 的 HTTP API 是非常底層的。 它只涉及流處理與消息解析。 它把一個消息解析成消息頭和消息主體,但不解析具體的消息頭或消息主體。

1、API結(jié)構(gòu)圖

由于該模塊中的內(nèi)容比較多,圖片我就分開傳了,避免一張圖密密麻麻的。

1.1 模塊類結(jié)構(gòu)圖

1.2 Agent類結(jié)構(gòu)圖

1.3 ClientRequest類結(jié)構(gòu)圖

1.4 Server 類結(jié)構(gòu)

1.5 ServerResponse類結(jié)構(gòu)圖

1.6 IncomingMessage類結(jié)構(gòu)圖

1.7 靜態(tài)方法和屬性圖

2、類關(guān)系

在看API之前,我還是簡單的縷一縷上面幾個類的關(guān)系吧,從一個簡單的例子開始

2.1 簡單且核心的例子
const http = require("http");
//server
const server = http.createServer((clientReq,serverRes)=>{
    serverRes.end();
}).listen(3000)

//client
const client=http.get("http://localhost:3000",(clientRes)=>{
    
})

上面那么簡單的幾行代碼已經(jīng)成功創(chuàng)建了一個server和一個client,看似簡單,實際上卻不這樣,上面代碼以一共創(chuàng)建了4個實例,可以對照著頂部的那張圖看。

server:http.Server 類的實例,用來提供服務(wù),處理客戶端的請求。

client:http.ClientRequest 類的實例,用于向服務(wù)端發(fā)起請求

clientReq/clientRes:http.IncomingMessage 類的實例,【clientReq】用于服務(wù)端獲取客戶端請求的信息,【clientRes】用于客戶端獲取服務(wù)端返回的相關(guān)消息

serverRes:http.ServerResponse 類實例,用于服務(wù)端響應(yīng)客戶端請求

2.2 類關(guān)系圖

圖片有點亂,在畫圖本里面拖出來的,講究看吧,下面貼出繼承關(guān)系的源碼,只貼框架,里面具體的內(nèi)容就不貼了,貼出來感覺蠻亂的。

http.IncomingMessage 類繼承 stream.Readable:

  export class IncomingMessage extends stream.Readable {}

http.ServerResponse 類繼承stream.Writable:

export class OutgoingMessage extends stream.Writable {}

export class ServerResponse extends OutgoingMessage {}
3、一些例子

下面是部分API的例子,對部分API的一個簡單代碼實現(xiàn)

3.1 server屬性
const http = require("http");
const server=http.createServer((ClientRequest,ServerResponse)=>{
  ServerResponse.end();
})
server.listen(3000);
console.log("listening: "+server.listening);
console.log("maxHeadersCount: "+server.maxHeadersCount);
console.log("timeout: "+server.timeout);
console.log("keepAliveTimeout: "+server.keepAliveTimeout);


// listening: true
// maxHeadersCount: null (沒有限制)
// timeout: 120000
// keepAliveTimeout: 5000
3.2 server事件
const http = require("http");

const server = http.createServer((ClientRequest, ServerResponse) => {
    ServerResponse.end();
}).listen(3000);

server.on("request", (request, response) => {
    console.log("服務(wù)端收到請求");
})

server.on("connection",socket=>{
    //超過默認的5000msTCP流會被關(guān)閉,再次請求時會被重新建立
    console.log("一個新的 TCP 流被建立");
})
3.3 serverResponse屬性
const http = require("http");
const server = http.createServer((ClientRequest, ServerResponse) => {
    ServerResponse.writeHead(200, { "Content-Type": "text/plain"});
    ServerResponse.write("hello world");
    console.log("connection: "+ServerResponse.connection);
    console.log("finished: "+ServerResponse.finished);
    console.log("headersSent: "+ServerResponse.headersSent);
    console.log("sendDate: "+ServerResponse.sendDate);
    console.log("socket: "+ServerResponse.socket);
    console.log("statusCode: "+ServerResponse.statusCode);
    console.log("statusMessage: "+ServerResponse.statusMessage);
    ServerResponse.end();
    console.log("finished: "+ServerResponse.finished);
}).listen(3000);
/*
    connection: [object Object]
    finished: false
    headersSent: true
    sendDate: true
    socket: [object Object]
    statusCode: 200
    statusMessage: OK
    finished: true
*/
3.4 addTrailers()
const http = require("http");
const server = http.createServer((ClientRequest, ServerResponse) => {
    ServerResponse.writeHead(200, { "Content-Type": "text/plain" });
    ServerResponse.write("hello world");
    ServerResponse.addTrailers({"Content-MD5": "7895bf4b8828b55ceaf47747b4bca667"})
    ServerResponse.end();
}).listen(3000);
3.5 getHeader()
const http = require("http");
const server = http.createServer((ClientRequest, ServerResponse) => {
    ServerResponse.setHeader("foo","bar");
    ServerResponse.writeHead(200, { "Content-Type": "text/plain" });
    ServerResponse.write("hello world");
    console.log(ServerResponse.getHeader("foo"));
    ServerResponse.end();
}).listen(3000);
3.6 getHeaderNames()
const http = require("http");
const server = http.createServer((ClientRequest, ServerResponse) => {
    ServerResponse.setHeader("foo","bar");
    ServerResponse.writeHead(200, { "Content-Type": "text/plain" });
    ServerResponse.write("hello world");
    console.log(ServerResponse.getHeaderNames());
    //[ "foo", "content-type" ]
    ServerResponse.end();
}).listen(3000);
3.7 get()
const http = require("http");
const ClientRequest = http.get("http://localhost:3000", res => {
    res.setEncoding("utf8")
    let rawData = "";
    res.on("data", chunk => {
        rawData += chunk;
    })
    res.on("end", () => {
        console.log(rawData);
    })
})
ClientRequest.on("response", (imsg) => {
    console.log("收到響應(yīng)");
})
3.8 http.request

摘一個官方例子^_^

const postData = querystring.stringify({
  "msg" : "Hello World!"
});

const options = {
  hostname: "www.google.com",
  port: 80,
  path: "/upload",
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
    "Content-Length": Buffer.byteLength(postData)
  }
};

const req = http.request(options, (res) => {
  console.log(`狀態(tài)碼: ${res.statusCode}`);
  console.log(`響應(yīng)頭: ${JSON.stringify(res.headers)}`);
  res.setEncoding("utf8");
  res.on("data", (chunk) => {
    console.log(`響應(yīng)主體: ${chunk}`);
  });
  res.on("end", () => {
    console.log("響應(yīng)中已無數(shù)據(jù)。");
  });
});

req.on("error", (e) => {
  console.error(`請求遇到問題: ${e.message}`);
});

// 寫入數(shù)據(jù)到請求主體
req.write(postData);
req.end();

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88796.html

相關(guān)文章

  • Node】前后端模塊規(guī)范與模塊加載原理

    摘要:例如指定一些依賴到模塊中實現(xiàn)規(guī)范的模塊化,感興趣的可以查看的文檔。 CommonJS 定義了 module、exports 和 require 模塊規(guī)范,Node.js 為了實現(xiàn)這個簡單的標準,從底層 C/C++ 內(nèi)建模塊到 JavaScript 核心模塊,從路徑分析、文件定位到編譯執(zhí)行,經(jīng)歷了一系列復(fù)雜的過程。簡單的了解 Node 模塊的原理,有利于我們重新認識基于 Node 搭建的...

    jsyzchen 評論0 收藏0
  • node核心特性理解

    摘要:概述本文主要介紹了我對的一些核心特性的理解,包括架構(gòu)特點機制核心模塊與簡單應(yīng)用。在此期間,主線程繼續(xù)執(zhí)行其他任務(wù)。延續(xù)了瀏覽器端單線程,只用一個主線程執(zhí)行,不斷循環(huán)遍歷事件隊列,執(zhí)行事件。 原文地址在我的博客,轉(zhuǎn)載請注明來源,謝謝! node是在前端領(lǐng)域經(jīng)常看到的詞。node對于前端的重要性已經(jīng)不言而喻,掌握node也是作為合格的前端工程師一項基本功了。知道node、知道后端的一些東西...

    huangjinnan 評論0 收藏0
  • 深入淺出Node.js

    摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時間有限,資源有限。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對于熟練掌握JS語言后的廣義Node.js.至于為什么...

    oujie 評論0 收藏0
  • 深入淺出Node.js

    摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時間有限,資源有限。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對于熟練掌握JS語言后的廣義Node.js.至于為什么...

    MadPecker 評論0 收藏0
  • 深入淺出Node.js

    摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時間有限,資源有限。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對于熟練掌握JS語言后的廣義Node.js.至于為什么...

    lily_wang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<