node基础学习——http基础知识
Posted 飞鲨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node基础学习——http基础知识相关的知识,希望对你有一定的参考价值。
<一> HTTP基础createServer()相关事件介绍
1. 创建HTTP服务器
server = http.createServer([requestListener])
// 下面的介绍都会使用server创建的服务器对象
// requestListener为一个回调函数 => function(request,response){ ... }
参数介绍: request客户端向服务器发送请求,response服务器响应客户端的请求,发送内容给客户端。
如果不使用createServer()里面的回调函数,可以通过监听该方法创建服务器对象request事件(当接收到客户端请求时触发)。
server.on(\'request\',function(request,response){ // 回调函数代码 })
2. listen监听端口
server.listen(prot,[host],[backlog],[callback])
参数介绍:
port参数值用于指定需要监听的端口号,参数值为0时将为HTTP服务器随机分配一个端口号;
host参数用于指定需要监听的地址,如果省略该参数,服务器将监听来自任何IPV4地址的客户端链接;
backlog参数值为一个整数,用于指定位于等待队列中的客户端连接的最大数量,一旦超过这个整数值,HTTP服务器将开始拒绝来自新的客户端连接,该参数的默认最大参数值511;
当对HTTP服务器指定了需要监听的地址及端口后,服务器将立即开始监听来自该地址及端口的客户端连接,这时触发该服务器的listening事件,可用listen方法的callback参数来指定listening事件触发时调用的回调函数,也可以使用
server.on(\'listening\',function(){ // 回调函数 })
3. 可以使用HTTP服务器的close方法关闭该服务器,方法如下
server.close();
当服务器被关闭时,触发服务器的close事件,可以通过监听该事件并指定回调函数的方法来指定当服务器被关闭时所需执行的处理。
server.on(\'close\',function(){ // 回调函数 });
4. 在对HTTP服务器指定需要监听的地址及端口号,如果该地址及端口号被占用,将产生一个错误代码"EADDRINUSE"的错误(表示用于监听的地址及端口号被占用),同时将触发HTTP服务器对象error事件。
server.on(\'error\',function(e){ if(e.code === \'EADDRINUSE\'){ // 可以在此出指定当地址及端口号被占用所需执行的处理 } })
5. 在默认情况下,客户端和服务器每进行一次HTTP操作,都将建立一次连接,客户端与服务器之间的交互通信完成后该连接中断。在HTTP1.1中,添加来长连接支持。如果客户端发出的请求头信息或者服务器发出的响应头信息中加入了“Connection:keep-alive”信息,则HTTP连接将继续保持连接,客户端可以继续通过相同的连接向服务器端发出请求。
6. 在Node.js中,当客户端与服务器端建立连接时,触发HTTP服务器对象的connection事件,可以通过监听该事件并在该事件触发时调用的回调函数中指定当连接建立时所需要执行的操作
server.on(\'connection\'function(){ // 回调函数 })
备注:浏览器中访问HTTP服务器时,浏览器会发出两次客户单请求,一次时用户发出的请求,另一次是浏览器为页面在收藏夹中的显示图标(默认为facicon.ico)而自动发出的请求。
7. 可以使用HTTP服务器的setTimeout方法来设置服务器的超时时间。当该超时时间超过之后,客户端不可继续利用本次与HTTP服务器建立的连接
server.setTimeout(msecs,callback)
参数介绍:mecs为一个整数值,用于设置服务器的超时时间,单位为毫秒。可以通过该参数值设置为0的方法取消服务器的超时处理
callback参数用于设置当服务器超时时调用的回调函数,在该回调函数中可以使用一个参数,参数值为服务器用于监听客户端请求的socket对象。
当服务器超时时,触发该服务器对象的timeout事件,也可以不用在setTimeout方法中使用回调callback函数,而是通过监听timeout事件
server.on(\'timeout\',function(){ // 回调函数 })
另外,服务器拥有一个timeout属性,属性值为整数,单位毫秒,可用于查看或者修改服务器的超时时间。
<二> 获取客户端请求信息
HTTP服务器接收到客户端请求时调用的回调函数中的第一个参数值为一个http.IncomeingMessage对象,该对象用于读取客户端请求流中的数据,因此,当从客户端请求流中读取到新的数据时触发data事件,当读取完客户端请求流中的数据时触发end事件。
例子中get/post用法只是参考,关于模块url和mkquery-string请查看Node.js GET/POST对应的url/query-string常用的方法介绍
var url = require(\'url\'); var queryString = require(\'query-string\'); var http = require(\'http\'); http.createServer(function (req, res) { // 1.get var obj = url.parse(req.url,true); var urlStr = obj.pathname; var GET = obj.query; // 2.post let str = \'\'; let POST = null; req.on(\'data\',function (data) { str += data; }); req.on(\'end\',function () { POST = queryString.parse(str); console.log(POST); }); }).listen(9696);
以上是关于node基础学习——http基础知识的主要内容,如果未能解决你的问题,请参考以下文章