<一> 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. Maya+VS编程入门初体验(HelloWorld)

    Maya2018 + VS2017 环境搭建见 博客 1. 项目: VS 新建了一个 MEL Command类型的项目(MayaProject) 2. HelloWorld代码 #include< ...

  2. Why Python's Integer Division Floors ---- python int(6/-132)时答案不一致,向下取整

    leetcode150题中有一个步骤: int(6/-132) == 0 or ==-1? 在自己本地python3环境跑是int(6/-132) =0,但是提交的时候确实-1. 查找相关资料解惑: ...

  3. maven-archetype-plugin 的正确打开方式

    1.  准备好一个编辑好的模板工程 2. 在 pom.xml 中添加 maven-archetype-plugin 插件 <plugin> <groupId>org.apach ...

  4. 解决SQL语句在Dapper执行超时比Query慢的问题

    在语句结尾加上 Add OPTION (RECOMPILE) to the end https://stackoverflow.com/questions/10933366/sp-executesql ...

  5. window 关机

    schtasks /create /tn "关机" /tr "shutdown /s" /sc once /st 20:30

  6. Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】

    作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS             阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...

  7. Android Studio中设置与Eclipse中 Ctrl+1 功能类似的快捷键

    Eclipse:Ctrl + 1 Android Studio: Alt + Enter 1. 首先当然是打开设置窗口啦,然后在IDE Settings 下找到Keymap 2. 在Keymap的搜索 ...

  8. Linux 6 修改ssh默认远程端口号

    linux 默认的ssh远程端口是22,有时默认端口会遭到别有用心的人们扫描或攻击,为了时我们的系统更加安全那就需要修改远程端口号 操作步骤:1.修改ssh_config配置文件 vim /etc/s ...

  9. 阿里巴巴 Java 开发手册 (十三) 其它

    1. [强制]在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度. 说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则); 2. [强制] ...

  10. C# 计时程序运行时间

    第一种   System.DateTime public static void SubTest() { DateTime beforeDT = System.DateTime.Now; , , , ...