node基础学习——http基础知识-01-客户单请求
<一> 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-客户单请求的更多相关文章
- node基础学习——http基础知识-02-http响应数据流
<一> 发送服务器端响应流 在createServer()方法的参数值回调函数或服务器对象的request事件函数中的第二个参数值为一个http.ServerResponse对象,可以利用 ...
- salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型
看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...
- WebService基础学习(一)—基础知识
一.WebService 1.什么是WebService Web Service(WEB服务)能够快捷和方便地综合结合各种系统.商务和任何应用平台.利用最新的Web Service 标准能够 ...
- 【python基础学习】基础重点难点知识汇总
python中decorator装饰器 语法示例: @decorator 什么是装饰器: 问题: 定义一个函数后 在运行时动态增加功能 又不想改动函数本身的代码 示例: # 希望对下列函数调用增加lo ...
- JAVA基础学习day24--Socket基础一UDP与TCP的基本使用
一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...
- java基础学习总结——基础语法1
一.标识符
- java基础学习总结——基础语法2
一.语句
- JAVA基础学习day23--GUI基础
一.GUI概述 1.1.GUI概述 Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面, CLI: Command line User Interf ...
- Python基础学习Day7 基础数据类型的扩展 集合 深浅copy
一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...
随机推荐
- Idea导入maven项目没有识别
选中module的pom.xml,右键,选择" add as maven project",idea会识别该pom的项目
- 《设计模式》读懂UML类图
一.类中的主要关系 继承.实现.组合.聚合.依赖.关联 二.UML类图 三.代码实现 public class H2O { } public class O2 { } public interface ...
- elk使用记录
1.使用elk查询接口的时候 几个常用参数 http_host.raw 2.具体的接口名称:request_uri 3.想要把左边要查询的显示出来
- DL/T645-2007 及 Modbus-RTU智能电表调试工具
最近在做微信门禁,智能电表采集,智能水表采集项目时,发现网上很多调试工具用起来不顺手,电脑里面起码下了五六个软件. 好不容易弄清楚了,就自己写一个工具,方便自己使用,也顺便造福一下其他人吧
- 【Spring Boot学习之七】自定义参数&多环境配置&修改端口号&yml
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.自定义参数通过注解直接获取配置文件application.properties中配置key的value1.appl ...
- solr的创建分片的方式
在Solr4.4之后,Solr提供了SolrCloud分布式集群的模式,它带来的主要好处是: (1)大数据量下更高的性能 (2)更好扩展性 (3)更高的可靠性 (4)更简单易用 什么时候应该使用Sol ...
- 直击JavaScript之面向对象
有时候,我们使用电脑的时候,并不知道它的原理是什么,但是就是会使用他,这就是面向对象.同样的,在JavaScript中也可使用这种原理,接下来就随我一起探索一下关于JavaScript面向对象的内容吧 ...
- 003 SpringBoot整合SpringMVC、Mybatis 案例
1.不使用骨架创建一个maven工程 2.修改POM.xml文件 <?xml version="1.0" encoding="UTF-8"?> &l ...
- Jupyter notebook 安装
一.建议从官网下载最新版anaconda https://www.anaconda.com/ 进入网址找到下载位置,并找到对应的版本,下载python3.7,根据电脑系统自行选择32/64位进行下载, ...
- John Lemon's Haunted Jaunt(鬼屋游戏笔记)
1.使用Unity 2019.2.3 2.角色移动的控制脚本 3.后期处理组件PostProcessLayer (类似给相机加上了一层滤镜) 4.制作简单的怪物AI系统,使用 NAvMeshAge ...