Rumah > hujung hadapan web > tutorial js > 深入理解Node的HTTP核心模块

深入理解Node的HTTP核心模块

不言
Lepaskan: 2018-07-13 17:08:06
asal
1644 orang telah melayarinya

这篇文章主要介绍了关于深入理解Node的HTTP核心模块,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

HTTP

创建一个服务器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

var http = require('http');

var fs = require('fs');

var url = require('url');

 

var serverHandle = function(req, res) {

  var pathname = url.parse(req.url).pathname; // 对请求的url进行分析,取得pathname

  console.log(url.parse(req.url));

  console.log(url.parse(req.url).pathname);

  // 消除favicon.ico影响

  if (req.url !== "/favicon.ico")

    console.log(req.url); //消除/favicon.ico的影响

 

  console.log(pathname);

  // 读取文件

  fs.readFile(pathname.substr(1), function(err, data) {

    if (err) {

      console.log(err);

      res.writeHead(404, {"Content-Type""text/html"});

    else {

      res.writeHead(200, {"Content-Type""text/html"});

      res.end(data.toString());

    }

  })

};

 

var server = http.createServer(serverHandle);

 

server.listen(3000);

 

console.log('http is running at 127.0.0.1:3000');

Salin selepas log masuk
监听连接和请求

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

var http = require('http');

 

var server = http.createServer(); // 返回一个http.server实例

 

// 【一】

// 监听request事件,每接受到一个请求的时候触发

// 当服务端接收到客户端请求时,触发request事件,所以可以使用监听request事件的方式来代替createServer中的回调函数:

server.on('request'function(req,res) {

  //接收到客户端请求的连接后代码部分

})

 

// 【二】

// 【监听客户端的链接】

// server.listen(port,[host],[backlog],[callback]);

server.listen(3000,127.0.0.1);

 

/*

port:       监听的端口号,0表示为服务器随机分配一个端口号。

host:       监听的地址,默认为本机(localhost)

backlog:   指定位于[等待队列中]的客户端连接的[最大数量]。超过此数量,则服务器拒绝新的客户端请求。

callback:  开启监听后触发的回调函数。当服务器开启监听后会触发listening事件,可以通过监听listening事件来代替callback回调函数。

 */

 

server.on('listening'function(){

  console.log('我监听连接,并且执行此回调函数!!');

})

Salin selepas log masuk
connection 和 request的区别

1

2

3

4

5

6

7

8

9

10

11

12

13

// 默认情况下,客户端与服务端每进行依次HTTP交互就进行一次连接,在HTTP1.1之后添加了长连接,

// 如果在客户端发送请求头信息中或服务器发送的响应头信息中包含“Connection: keep-live”信息,则HTTP连接将继续保持。

 

 

// 当客户端与服务器建立连接时,会触发服务器对象的connection事件,可以通过监听connection事件来处理连接后的事情,此时回调参数为socket对象。

 

server.on('connection'function(socket) {

  console.log(socket);

})

 

** connection 和 request的区别

客户端与服务端每次建立连接的时候会触发connection事件,

当服务端接受到客户端请求的时候,就会触发request事件。发送请求是建立在双方已经成功连接的接触之上

Salin selepas log masuk
通过请求获取客户端信息

当客户端与服务器连接后,服务器可以通过 http.IncommingMessage 实例化的对象(createServer方法中回调函数的第一个参数)的一些属性和方法来获取客户端的请求信息和读取客户端请求的数据。

1

2

3

4

5

6

7

8

* method:   客户端请求方式

* url:      请求的地址

* headers:  客户端发送的请求头信息

* httpVersion: HTTP请求版本

* trailers: 客户端发送的trailers对象信息。只有IncommingMessage对象的end事件触发后才能读取到该信息。

* socket:   服务器端监听客户端请求的socket对象。

* data事件: 当服务器接收到客户端发送的请求数据时触发data事件。

end事件:  当客户端发送给服务器数据执行完毕时触发end事件。

Salin selepas log masuk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

var http = require('http');

 

var serverHandle = function(req,res) {

  console.log(req);

  req.on("data",function(data){

        console.log("接收到的数据:"+decondeURIComponent(data));

    });

 

  req.on("end",function(){

        console.log("数据接收完毕");

    });

}

 

var server = http.createServer(serverHandle);

 

server.listen(3000);

server.on('listening'function() {

  console.log('服务器启动中~~~');

})

Salin selepas log masuk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// 一个简单的get请求,获取信息

var http = require('http');

var url = require('url');

var util = require('util');

 

var serverHandle = function(req,res) {

  var parse = url.parse(req.url,true).query;

  res.write('name'+ parse.name);

  res.write('url'+ parse.url);

  res.end();

}

 

var server = http.createServer(serverHandle);

 

server.listen(3000);

server.on('listening'function() {

  console.log('服务器启动中~~~');

})

 

// http://localhost:3000/?url=123&name=321

Salin selepas log masuk
响应客户端信息

利用http.ServerResponse对象(createServer方法或request事件处理方法的第二个参数)向客户端发送数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Atas ialah kandungan terperinci 深入理解Node的HTTP核心模块. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Isu terkini
Untuk apa node.js digunakan?
daripada 1970-01-01 08:00:00
0
0
0
Paparkan medan tertentu rekod (node.js+mongodb)
daripada 1970-01-01 08:00:00
0
0
0
node.js - masalah port 80 pelayan
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan