UDP服务
UDP称为用户数据包协议,其不是面向连接的服务。Node中UDP只是一个EventEmitter实例,而非Stream的实例,具备以下自定义事件:
(1) message :当UDP套接字监听网卡端口后,接受消息时触发,触发携带的数据为消息Buffer对象和一个远程地址信息。
(2) listening :当UDP套接字开始侦听时触发该事件。
(3) close :调用close()方法时触发该事件,并不再触发message事件。若需再次触发message事件,需要重新绑定。
(4) error :当异常发生时触发,若不监听直接抛出,使进程退出。
HTTP服务
Node中http模块继承自tcp服务器(net模块),它能与多个客户端保持连接,由于其不为每个连接创建线程,保持很低的内存占用,所以能实现高并发。HTTP服务和TCP服务区别在于,在开启keepalive之后,一个TCP会话可以用于多次请求和响应。TCP服务以connection为单位进行服务,HTTP服务以request单位进行服务。http模块是将connection到request的过程进行封装。
http模块将连接所用的套接字的读写抽象为ServerRequest和ServerResponse对象,分别对应请求和响应操作。
(1) HTTP请求
对于TCP连接的读操作,http模块将其封装为ServerRequest对象。如报头部分req.method、req.url、req.headers,报文体数据部分抽象为一个只读的流对象,若业务逻辑需要读取报文体中的数据,则需要这个数据流结束后才能进行操作。
(2) HTTP响应
HTTP响应封装了底层连接的写操作,可以将其看成一个可写的流对象。
响应报文头部信息方法:res.setHeader()和res.writeHeader()方法,可以多次setHeader进行设置,但必须调用writeHeader写入连接才生效。
报文体部分方法:res.write()和res.end()方法
(3) HTTP服务端事件
connection :客户端与服务端建立TCP连接时,触发一次connection事件
request :建立TCP连接后,http模块底层将数据流中抽象出HTTP请求和HTTP响应,当请求数据发送到服务端,在解析出HTTP请求头后触发该事件;在res.end()后,TCP连接可用于下一次请求。
close :调用server.close方法停止接收新的连接,已有的连接都断开时触发该事件。
checkContinue :某些客户端在发送较大数据时,先发送一个头部带有Expect: 100-continue的请求到服务器,服务触发该事件;
connect :当客户端发起CONNECT请求时触发
upgrade :当客户端要求升级连接的协议时,需要和服务端协商,客户端会在请求头中带上Updagrade字段
clientError :连接的客户端发送错误,错误传到服务端此时触发该事件
(4) HTTP客户端
http模块提供http.request(options, connect),用于构造HTTP客户端。
HTTP客户端和服务端类似,在ClientRequest对象中,它的事件叫做response,ClientRequest在解析响应报文的时,一解析完响应头就触发response事件,同时传递一个响应对象ClientResponse供操作,后续响应报文以只读流的方式提供。









