<一> 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基础知识-01-客户单请求的更多相关文章

  1. node基础学习——http基础知识-02-http响应数据流

    <一> 发送服务器端响应流 在createServer()方法的参数值回调函数或服务器对象的request事件函数中的第二个参数值为一个http.ServerResponse对象,可以利用 ...

  2. salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

    看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...

  3. WebService基础学习(一)—基础知识

    一.WebService 1.什么是WebService      Web Service(WEB服务)能够快捷和方便地综合结合各种系统.商务和任何应用平台.利用最新的Web Service 标准能够 ...

  4. 【python基础学习】基础重点难点知识汇总

    python中decorator装饰器 语法示例: @decorator 什么是装饰器: 问题: 定义一个函数后 在运行时动态增加功能 又不想改动函数本身的代码 示例: # 希望对下列函数调用增加lo ...

  5. JAVA基础学习day24--Socket基础一UDP与TCP的基本使用

    一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...

  6. java基础学习总结——基础语法1

    一.标识符

  7. java基础学习总结——基础语法2

    一.语句

  8. JAVA基础学习day23--GUI基础

    一.GUI概述 1.1.GUI概述 Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面, CLI: Command line User Interf ...

  9. Python基础学习Day7 基础数据类型的扩展 集合 深浅copy

    一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...

随机推荐

  1. Jenkins集成TestNG

    1.Jenkins安装插件 TestNG Results Plugin 2. 添加配置 “构建后操作”->“Publish TestNG Results” 保持默认配置即可 3.查看报告 项目构 ...

  2. element ui 下拉框绑定对象并且change传多个参数

    废话不说直接上代码说明真相. <template> <div class="hello"> <span>可以设置的属性 value-key=&q ...

  3. npm 的一些命令

    查看项目中是否安装某个插件 npm [name] -v [name] 为要查询的插件的名字,如果已经安装就会显示该插件的版本号 npm list 查看项目中所有已安装的插件

  4. [转帖]Masscan教程和入门手册

    Masscan教程和入门手册 https://www.4hou.com/tools/8251.html 愣娃 安全工具 2017年11月1日发布 收藏 导语:masscan是为了尽可能快地扫描整个互联 ...

  5. Vue框架(三)——Vue项目搭建和项目目录介绍、组件、路由

    Vue项目环境搭建 1) 安装node,在官网下载好,然后在本地安装 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 2) 换源安装cnpm >: npm ins ...

  6. 虚拟机CentOS创建/使用快照

    快照 1.什么是快照 说的直白一点,就是创建一个备份.当执行了不可逆的错误操作后,可以通过快照用来恢复系统 2.创建快照的三种模式 挂载状态下创建快照 开机状态下创建快照 关机状态下创建快照 3.如何 ...

  7. pytest_04_测试用例setup和teardown

    学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次. 当然还有更高级一点的setupClass和teardownClass,需配合@ ...

  8. Visual Studio 2019 XAML Hot Reload功能介绍

    Visual Studio 2019提供了XAML Hot Reload功能,这个功能可以让WPF程序运行以后仍然可以修改XAML代码,并实时显示. XAML Hot Reload功能在Blend F ...

  9. C#基础—数组

    C#基础之数组 1.   数组的定义与初始化 一维数组: (1)            int [] A = new int[4]{ 0,1,2,3}; (2)            int[] B ...

  10. dump net core lldb 分析

    原文https://www.cnblogs.com/calvinK/p/9274239.html centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试) 写个dem ...