Page 79 - Node.js开发指南
P. 79

4.5  HTTP 服务器与客户端    71


                     request:当客户端请求到来时,该事件被触发,提供两个参数 req 和res,分别是                                    1
                      http.ServerRequest 和 http.ServerResponse 的实例,表示请求和响应信息。
                     connection:当 TCP  连接建立时,该事件被触发,提供一个参数  socket,为
                      net.Socket  的实例。connection  事件的粒度要大于  request,因为客户端在
                                                                                                      2
                      Keep-Alive 模式下可能会在同一个连接内发送多次请求。
                     close :当服务器关闭时,该事件被触发。注意不是在用户连接断开时。
                   除此之外还有  checkContinue、upgrade、clientError  事件,通常我们不需要关
               心,只有在实现复杂的 HTTP 服务器的时候才会用到。
                                                                                                      3
                   在这些事件中,最常用的就是   request  了,因此   http  提供了一个捷径:
               http.createServer([requestListener]) ,功能 是创建一 个  HTTP  服 务器并将
               requestListener 作为 request 事件的监听函数,这也是我们前面例子中使用的方法。
               事实上它显式的实现方法是:                                                                          4

                   //httpserver.js

                   var http = require('http');
                                                                                                      5
                   var server = new http.Server();
                   server.on('request', function(req, res) {
                     res.writeHead(200, {'Content-Type': 'text/html'});
                     res.write('<h1>Node.js</h1>');
                                                                                                      6
                     res.end('<p>Hello World</p>');
                   });
                   server.listen(3000);

                   console.log("HTTP server is listening at port 3000.");
                                                                                                      7
                   2. http.ServerRequest
                   http.ServerRequest 是 HTTP 请求的信息,是后端开发者最关注的内容。它一般由
               http.Server 的 request 事件发送,作为第一个参数传递,通常简称 request 或 req。
               ServerRequest 提供一些属性,表 4-2 中列出了这些属性。                                                   8
                   HTTP 请求一般可以分为两部分:请求头(Request Header)和请求体(Requset Body)。
               以上内容由于长度较短都可以在请求头解析完成后立即读取。而请求体可能相对较长,
               需要一定的时间传输,因此 http.ServerRequest 提供了以下3个事件用于控制请求体                                       9
               传输。
                     data :当请求体数据到来时,该事件被触发。该事件提供一个参数 chunk,表示接
                      收到的数据。如果该事件没有被监听,那么请求体将会被抛弃。该事件可能会被调
                                                                                                      10
                      用多次。
   74   75   76   77   78   79   80   81   82   83   84