NodeJS http Server

来源:互联网 发布:马赛克去除软件注册码 编辑:程序博客网 时间:2024/05/16 04:31

HTTP

如果要使用HTTP 的server 以及client 模块则
必须使用require('http')加载http 模块

NODE 中的HTTP 接口被设计成为支持HTTP 协议的很多特性,
这些特性通常那难以掌控,特别是
large,possiblechunk-encoded(块编码),messages

这个接口特意不缓冲整个请求(request)或者响应(responses)。
使用户可以使用流 的形式操作数据。

以下是用对象的形式表示的HTTP 信息头

{     'content-length': '123' ,     'content-type': 'text/plain' ,     'stream': 'keep-alive' ,     'accept': '*/*' }

所有key 都是小写,数值不能被修改

为了支持尽可能多的HTTP 应用,
NODE 的HTTP API 非常底层。
HTTP API只处理到流(stream)相关的操作以及信息解析。
API 将信息解析成为信息头和信息体
但并不解析实际的信息头和信息体的具体内容。

如果在基础平台上的OpenSSL 是可用的
则HTTPS 也能够被支持。


http.Server

这个模块会触发以下事件

1. Event: ‘request’

function(request,response){}

request是http.ServerRequest的一个实例
而response则是http.ServerResponse的一个实例

每个请求发生的时候均会被触发。
请记住,每个连接可能会有多个请求(在keep-alive永久连接情况下)。

2. Event: ‘connection’

function(stream){}

当一个新的TCP Steam建立后发出此消息(?),
stream是一个net.stream的对象,通常用户不会访问/使用这个事件。
参数stream也可以在request.connection中访问到。

3. Event: ‘close’

function (errno){}

当服务器关闭的时候触发此类事件。

4. Event: ‘upgrade’

function(request,socket,head){}

每当一个客户端请求一个http upgrade时候发出此消息。

这个upgrade请求是个啥请求?
向服务器指定某种传输协议以便服务器进行转换(如果支持)

如果这个事件没有监听,那么请求upgrade的客户端对应的连接将会被关闭。

  1. 参数request代表了一个http请求,和request事件的参数意义是相同的。
  2. socket是在服务器与客户端之间连接用的网络套接字(IP和端口)
  3. headBuffer的一个实例,是upgraded stream所发出的第一个包,这个参数可以为空。

当此类事件被触发后,该请求所使用的socket并不会有一个数据(data)事件的监听者(listener),这意味着你如果需要处理通过这个socket发送到服务端的数据的话则需要自己绑定数据事件监听器。

5 . Event: ‘clientError’

function(exception){}

如果一个客户端连接的error事件被触发,这个函数将会被执行。

1. http.createServer(requestListener)

创建一个服务器,返回一个新的server对象。
requestListener是一个会去自动监听request事件的函数。

2. server.listen(port, [hostname], [callback])

在指定端口主机名上接受连接。
如果hostname 没有写,
这个服务器将直接在此机器的所有IPV4地址上接受连 接(INADDR_ANY).

如果要在UNIX SOCKET 上监听的话,
则需要提供一个文件名来替换端口和主机名.
这个方法是一个异步的方法,
作为最后一个参数的回调方法将在服务器已经在此端口上绑定好后
被调用.

结合12举个例子就是下面的代码

var http = require('http')http.createServer(function (req, res) {  res.writeHead(200, { 'Content-Type': 'text/plain' })  res.end('Hello World\n')}).listen(3000, function () { console.log('Listening on port 3000') })


说明:
function(req,res)就是1中所说的requestListener函数

3. server.listen(path, [callback])

建立一个UNIX SOCKET 服务器并在指定路径监听。
这个方法是一个异步的方法,
作为最后一个参数的回调方法将在服务器已经在此端口上绑定好后被调用。

4. server.setSecure(credentials)

允许此服务器支持HTTS,配合crypto 模块credentials 指定私钥以及此服务器的证书
并且也可选择数字中心认 证的证书作为客户端的认证(方式)

如果authentication 中有一或多个数字认证中心证书,
则服务器将请求客户端发出一个客户端证书作为HTTPS 握手的一部分。想要验证、访问证书合法性及内容则可以
通过服务器的request.connectionverifyPeer() 以及 getPeerCertificate() 来实现。

5. server.close()

使此服务器停止接受任何新连接。

6. server.maxConnections

设置此属性使服务器的连接数高于此数值时拒绝连接。

7. server.connections

代表当前服务器的连接数。


小结

http.Server这个模块有

事件

  1. request
  2. connection
  3. close
  4. upgrade
  5. clientError

方法

  1. http.createServer(requestListener)
  2. server.listen(port, [hostname], [callback])
  3. server.listen(path, [callback])
  4. server.setSecure(credentials)
  5. server.close()
  6. server.maxConnections
  7. server.connections
0 0
原创粉丝点击