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' ...
随机推荐
- VLOOKUP使用方法
VLOOKUP函数是常用的一个内容查找函数,用于通过某一条件查询数据源中需要的内容.语法:=VLOOKUP(查询值,数据源,显示序列,匹配参数)1)查询值:匹配的key值2)数据源:查找范围,1)起点 ...
- (转) 解决django项目部署到nginx+uwsgi服务器后 admin页面样式消失的问题
原贴地址:https://blog.csdn.net/qq_42571805/article/details/80862455 摘要 uwsgi为主要服务器,nginx为反向代理服务器部署完成之后发现 ...
- C# .net 提升 asp.net mvc, asp.net core mvc 并发量
1.提升System.Net.ServicePointManager.DefaultConnectionLimit 2.提升最小工作线程数 ------ DefaultConnectionLimit在 ...
- ArcGIS Server 10.2忘记用户名密码的解决方案
忘记了ArcGIS Server Manager的密码,可以采用以下方法进行重置. 1.找到ArcGIS Server的安装目录 D:\Program Files\ArcGIS\Server\tool ...
- 【Spring Boot学习之五】切面日志管理
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.log4j 常见方式:log4j.properties + org.apache.log4j.Logger比如:l ...
- c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?
要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在使用最新发布的Visual Studio 2015 CTP-6来构建一个Web应用程序. 大多数事情看起来真的很有希望,但我似乎找不到R ...
- DDD/CQRS模式,微服务,容器
DDD/CQRS模式,微服务,容器 https://docs.microsoft.com/zh-cn/previous-versions/msp-n-p/ee658109(v=pandp.10) We ...
- 1 RAID技术入门
序 RAID一页通整理所有RAID技术.原理并配合相应RAID图解,给所有存储新人提供一个迅速学习.理解RAID技术的网上资源库,本文将持续更新,欢迎大家补充及投稿.中国存储网一如既往为广大存储界 ...
- Mysql 中 int(3) 和 int(11) 的区别
[1]int(3) 和 int(11)的区别(思维惯性认知错误) 这里的3或11代表的是存储在数据库中的具体的长度,总以为int(3)只能存储3个长度的数字,int(11)只会存储11个长度的数字. ...
- 宝塔linux定时任务设置
选择shell脚本选择执行周期在脚本内容内写入 curl -sS --connect-timeout 10 -m 60 '此处为地址链接';如下图所示: