http模块解析

首先。你要明白http模块四个类是干嘛的,http四大类:http.ClientRequest 类http.Server 类http.ServerResponse 类,http.IncomingMessage 类.

两个关键函数

request :这是客户端专用的创建http会话的工具。他的回调函数其实就是response事件的回调函数。但是这个回调函数接受的参数是incomingmessage,这个英语很形象,来电信息,那么我们就知道这是从服务器传进来的,然后,我们就可以利用incomingmessage里面的工具,对他进行反馈。

createserver,就是服务器专用的工具函数了,他的回调函数其实是触发了http.server类里的request事件。他的req接受的是incomingmessage,来电信息,对于服务器而言你客户端就是来电信息。同样服务器需要发话。它用的就是serverresponse类发送会话处理的。那么服务器一个接受信息后,用incoming来处理,发送用serresponse进行处理。

然后server类是对服务器本身进行服务拓展。clientResponse是客户端自身处理,还有对服务器进行发送信息,进行处理。

 

 

http.Server 类:仅仅对服务器本身能力。不对发送信息进行处理。也不对接受信息进行处理。

http.ClientRequest 类:对客户端本身能力,也对发送信息进行处理。但不对接受的信息进行处理。(触发close事件,也是在request内部设定好了。)

http.ServerResponse 类:服务器对发送信息进行处理。

http.IncomingMessage 类.:客户端和服务端的接受信息处理类。

 

所以,你可以把http的客户端和服务端分成三部分,一部分;本身。一部分:发送会话处理。最后一部分:接受会话:处理。

 

 

下面摆上程序,应该不会出错。建议在学习相关api后进行处理。

 

客户端:

// 通过nodejs模拟客户端
const http = require("http");
let options = {
    method:"post",
    host:"127.0.0.1",
    port:2121,
    path:"/"
};
let obj = {
    name:"李四",
    age:20
};

let request = http.request(options,function (res) {
    console.log('建立了请求');
    let str = "";

    res.setEncoding('utf8').on("data",function(chunk){
        console.log(chunk);
        str += chunk;
    });
    res.on("end",function () {
        console.log('服务器已经全部发送完毕');
    })
});
request.on('error',(error)=>{
    console.log(error)
});

request.write(JSON.stringify(obj),'utf8');
request.end();

request.setSocketKeepAlive(true,1000);
request.setTimeout(5000,()=>{
    console.log('链接超时');
});


request.on('socket',()=>{
    console.log('发送了socket请求');
});

request.on('close',()=>{
    console.log('触发了close事件');
});

服务端:

const http = require("http");
const fs = require("fs");
const url = require("url");
const querystring = require("querystring");
let server = http.createServer(function (req,res) {
    console.log(req.method);
    req.setEncoding('utf8').on('data',(data)=>{
        console.log(data)
    });

    req.on("end",function () {
        console.log('客户端已经全部发送完毕');
    });
    res.write('你好啊,我是服务器','utf8');
    res.end()

});



server.listen(2121,()=>{
    console.log('服务器开始监听!');
});

服务器是可以自己关闭的额,但是客户端貌似自动关闭了。我对keepalive,也不怎么懂。dgram,net,http模块,三个大块。真的是各不相同。

 

假设,我先打开服务器

 

1.服务器的listen方式就开始执行了。创建服务器,但是不使用回调函数,回调函数要等客户端发送信息。request事件。

 

2.客户端开始链接。他就是一个tcp包装过的,但是他的回调函数(response),也要等服务器发送信息。先出发soket事件。然后,可以使用clientresponse中的一些函数进行传送信息。主要两个(write和end,write发送信息,触发服务器data事件。end,触发服务器的end事件。)

 

3.服务器的request事件,接受到了信号。对req,来自客户端。用incoming进行加工。根据data事件和end事件。

然后发送信息,使用serverresponse。end和write相同的触发的是客户端的事件。要交互吗。客户端和服务器。

 

接受到信息后触发end事件过后,那么这个会话他就结束了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值