Node.js API实例讲解——创建http服务器
创建http服务器
什么是http?这里就不详解了,感兴趣的可以通过各种途径找到相关知识,这里要主要讲解的是通过node.js建立http服务器和http客户端。
先开发个http服务器,然后让浏览器访问。
var http = require("http"); var server = http.createServer( function(incomingMsg,response){ response.write("hello"); response.end(); } ); server.listen(8080);
ok,运行这个http服务器,浏览器访问 localhost:8080 会在浏览器中显示 hello。
看起来没任何作用,但如果用net.createServer建立个服务器,浏览器就无法显示hello,因为http模型可以处理http的请求和响应,而net是很低级的数据的传输,而这些复杂的http协议的解析,node.js都已封装好,只要用就可以了。
这个例子虽然没什么功能,但可以分析出几个对象,server服务器对象,incomingMsg是传入的信息(请求信息),response响应对象。
server对象是http.Server实例,incomingMsg对象是http.IncomingMessage实例,response对象是http.ServerResponse实例。
下面对着三个类进行详解。
http.Server类
http.Server是net.Server的子类。
server对象可产生的事件
'request'事件,但有客户访问请求数据库资源时,会产生这个事件,这个事件的监听器可接收两个参数,incomingMessage和response。前面的http.createServer(function(incomingMsg,response)...) 也是加入一个监听器。
server.on("request",function(msg,response){ ... ... })
'connection'事件和net.Server的一致,可参阅。监听器会接收到一个socket,和net.Server一致,也可通过incomingMessage.socket得到。
server.on("connection",function(socket){ ... })
'close'事件是当服务器关闭时产生
server.on("close",function(){ ... })
'checkContinue' 事件,是当客户端发送 Expect:100-continue 请求时产生的事件,客户之所以这么做,是先要请求一下服务器是否同意继续发送主体内容,这个一般不会用到,有兴趣的可以搜索一下 Expect:100-continue 相关资料。
'connect'事件,是当客户请求方法是"CONNECT"时,会产生的事件,下面写个例子:
// 服务器 var http = require("http"); var server = http.createServer(); server.on("connect",function(req,socket,head){ ...... }) server.listen(8080) // 客户端 var http = require("http"); var req = http.request({ port:8080, method:"CONNECT" },function(res){ ...... }) req.end();
当然CONNECT方法并不是浏览器支持的,所以浏览器访问就不会被接收到。
'upgrade' 事件,是当请求头部信息有 upgrade 属性时产生这个事件。例如的html5 websocket协议,请求时就会产生这个事件。
'clientError'事件,是客户端出现异常时抛出,这里的异常并不能通过request.destory来模拟,只能通过throw抛出异常来模拟,看例子:
// 服务器 var http = require("http"); var server = http.createServer(); server.on("clientError",function(exception,socket){ console.log("客户端有错误") }) server.listen(8080) // 客户端 var http = require("http"); var req = http.request(8080) setTimeout(function(){ throw new Error(); // 抛出异常 },1000);
exception是异常原因,socket是抛出异常的socket。
server.listen(port, [hostname], [backlog], [callback])
port 参数,是打开一个服务器端的监听端口,如果是0,表示由系统分配一个随机端口。
host[可选]参数,表示主机名,如果设置localhost那么就拒绝通过127.0.0.1访问服务器的客户端。
backlog[可选]参数,表示同时访问的最大数,默认511。
callback[可选]参数,回调函数,http server已经准备妥当时会调用它。
server.close([callback])
参看上一节“创建socket服务器”
server.setTimeout(msecs,callback)
设置客户端空闲超时的监听器。注意,这个不是设置服务器超时,而是指客户端与服务器建立的socket超时。msecs以毫秒为单位,callback(socket) 是超时监听器,监听器会获得一个socket参数。server.timeout值默认是120000毫秒。
第一种写法
var http = require("http"); var Socket = require("net").Socket; var server = http.createServer(); server.on("request",function(req,res){ //res.end();这里不调用res.end从而模拟超时 }) server.timeout = 3000; server.on("timeout",function(s){ console.log(s instanceof Socket) // true }) server.listen(8080);
第二种写法
var http = require("http"); var Socket = require("net").Socket; var server = http.createServer(); server.on("request",function(req,res){ //res.end(); }) //server.timeout = 3000; server.setTimeout(5000,function(s){ console.log(s instanceof Socket) // true }) server.listen(8080)
【小结】
本节开始做了一个简单的http服务器,通过浏览器访问,然后通过这个例子分析出3个主要的对象,Server,IncommingMessage,ServerResponse, 本节对Server类进行了讲解,下一节将对IncommingMessage讲解。
相关文章
- 整理几个常用的正则
- 关于NodeJS系列教程
- NodeJS独立开发web框架——构思实现与发布(1)
- NodeJS独立开发web框架——构思实现与发布(2)
- NodeJS独立开发web框架——构思实现与发布(3)
- NodeJS独立开发web框架——构思实现与发布(4)
- NodeJS独立开发web框架——静态服务器开发
- NodeJS独立开发web框架——静态服务器开发(1)
- NodeJS独立开发web框架——静态服务器开发(2)
- NodeJS独立开发web框架——静态服务器开发(3)
- NodeJS独立开发web框架——静态服务器开发(4)
- Get与Post方法请求——让app具有get/post方法