网络编程,NodeJS学习笔记之网络编程
分类:计算机网络

Node提供丰富的网络编程模块

NodeJS学习笔记之网络编程,nodejs学习笔记

Node提供丰富的网络编程模块

Node模块 协议
net TCP
dgram UDP
http HTTP
https HTTPS

TCP服务事件分为下面两类

(1)、服务器事件

对于通过net.createServer()创建的服务器而言,它是一个EventEmitter实例,自定义事件有以下几种:

listening :在调用listen()绑定端口或Domain Socket后触发,简写为server.listen(port, listener),通过第二个参数传入。

connection :每个客户端套接字连接到 服务器 时触发,简洁写法为通过net.createServer(),最后一个参数传递。

close :当服务器关闭时触发,在调用server.close()后,服务器将停止接受新的套接字连接,但保持当前存在的连接,等待所有连接断开后,会触发该事件。

error :当服务器发生异常时,将会触发该事件。

(2)、连接事件

服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可写可读Stream对象。Stream对象可以用于服务端和客户端之间的通信,既可以通过data事件从一端读取另一端发来的数据,也可以通过write()方法从一端向另一端发送数据。

data :当一端调用write()发送数据时,另一端会触发data事件,事件传递的数据就是write()发送的数据

end :当连接中的任意一端发送FIN数据时,将会触发该事件。

connect :该事件用于 客户端 ,当套接字与服务器连接成功时会触发。

drain :当任意一端调用write()发送数据时,当前这端触发该事件。

error :当异常发送

close :当套接字完全关闭时触发

timeout :当一定时间后连接不再活跃时,触发该事件通知用户该连接被闲置了。

TCP针对网络中的小数据包有一定优化策略:Nagle算法,当数据达到一定量后才触发。

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供操作,后续响应报文以只读流的方式提供。

(5) HTTP客户端事件

response :与服务端的request事件对应的客户端在请求发出后得到响应时触发该事件。

socket :当底层连接池中建立的连接分配给当前请求对象时触发;

connect :当客户端向服务器发送CONNECT请求时,若服务端响应了200状态码,客户端将会触发该事件。

upgrade :客户端享服务端发送Upgrade请求时,若服务端响应了101 Switching Protocols状态,客户端将会触发该事件。

continue :客户端向服务端发起Expect: 100-continue头信息后,以试图发送较大数据,若服务端响应100 continue状态,服务端将触发该事件

WebSocket服务

WebSocket最早是作为HTML5重要特性出现的,相比HTTP有以下优点:

(1) 客户端和服务端只建立一次TCP连接,可以使用更少的连接

(2) WebSocket服务端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效

(3) 更轻量级的协议头,减少数据传输

Node中没有内置WebSocket的库,但社区的ws模块封装了WebSocket的底层实现如著名的socket.io

深入浅出NodeJS——网络编程

Node提供丰富的网络编程模块

Node模块 协议
net TCP
dgram UDP
http HTTP
https HTTPS

TCP服务

  • 传输控制协议,网络传输层
  • OSI模型: 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层

传输之前先要三次握手形成会话,一个套接字socket只用于一个服务

Node模块 协议
net TCP
dgram UDP
http HTTP
https HTTPS

nodejs前景怎

明确的说,nodejs是一个值得你投入的环境,相比其他服务器的编程环境,nodejs高效、现代,是业界最新思考的智慧结晶,与云平台天然的结合。也就是说,不管未来如何发展,nodejs对业界的影响已经存在,并将持续下去。

学习nodejs之前,最好已经很了解javascript,以及其编程模式,nodejs的基础是chrome的V8引擎,以javascript作为其编程语言。  

TCP服务

TCP服务事件分为下面两类 (1)、服务器事件 对于通过net.createServer()创建的服务器而言,它是一个EventEmitter实例,自定义事件有以下几种: listening:在调用listen()绑定端口或Domain Socket后触发,简写为server.listen(port, listener),通过第二个参数传入。 connection:每个客户端套接字连接到服务器时触发,简洁写法为通过net.createServer(),最后一个参数传递。 close:当服务器关闭时触发,在调用server.close()后,服务器将停止接受新的套接字连接,但保持当前存在的连接,等待所有连接断开后,会触发该事件。 error:当服务器发生异常时,将会触发该事件。 (2)、连接事件

服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可写可读Stream对象。Stream对象可以用于服务端和客户端之间的通信,既可以通过data事件从一端读取另一端发来的数据,也可以通过write()方法从一端向另一端发送数据。

data:当一端调用write()发送数据时,另一端会触发data事件,事件传递的数据就是write()发送的数据 end:当连接中的任意一端发送FIN数据时,将会触发该事件。 connect:该事件用于客户端,当套接字与服务器连接成功时会触发。 drain:当任意一端调用write()发送数据时,当前这端触发该事件。 error:当异常发送 close:当套接字完全关闭时触发 timeout:当一定时间后连接不再活跃时,触发该事件通知用户该连接被闲置了。 TCP针对网络中的小数据包有一定优化策略:Nagle算法,当数据达到一定量后才触发。

创建TCP服务

 var net = require('net');

//使用net.createServer(listener)创建,**listener是连接事件connection的侦听器**
var server = net.createServer(function(socket) {
    socket.on('data', function(data) {
        socket.write("hello");
    });
    socket.on('end', function() {
        console.log('断开');
    });
    socket.write("hello111:n");
});
server.listen(8124, function() {
    console.log('server bound');
}); 
//或者
var server = net.createServer();

server.on('connection', function(socket) { //新的连接
});
server.listen(8124);

//可以使用$ telnet 127.0.0.1 8124,或者使用net模块构建客户端
var net = require('net');
var client = net.connect({  //
    port: 8124
}, function() { //'connect' listener
    console.log('client connected');
    client.write('world!rn');
});
client.on('data', function(data) {
    console.log(data.toString());
    client.end();
});
client.on('end', function() {
    console.log('client disconnected');
});

也可以对Domain Socket监听 server.listen('/tmp/echo.sock');
使用 $ nc -U /tmp/echo.sock 测试

TCP服务事件分为下面两类

Nodejs的问题,javascript编程

你可以看看日志,可以通过控制台看,看那些模块没有找到,然后自己 npm一下  

Node提供丰富的网络编程模块 Node模块 协议 net TCP dgram UDP http HTTP https HTTPS TCP服务事件分为下面两类...

UDP服务

UDP称为用户数据包协议,其不是面向连接的服务。Node中UDP只是一个EventEmitter实例,而非Stream的实例,具备以下自定义事件: (1) message:当UDP套接字监听网卡端口后,接受消息时触发,触发携带的数据为消息Buffer对象和一个远程地址信息。 (2) listening:当UDP套接字开始侦听时触发该事件。 (3) close:调用close()方法时触发该事件,并不再触发message事件。若需再次触发message事件,需要重新绑定。 (4) error:当异常发生时触发,若不监听直接抛出,使进程退出。

服务器事件

使用net.createServer()创建的服务器是个EventEmitter实例

  1. listening 在调用server.lisren()绑定端口或者Domain Socket后触发server.listen(port,listeningListener)
  2. connection 每个客户端套接字连接到服务端时触发 net.createServer(),最后一个参数传递
  3. close 当服务器关闭时触发 在调用server.close()后,服务器会停止接受新的套接字,但当前的连接不会断,直到所有连接都断后触发
  4. error 服务器发生异常时触发,如果不帧听error事件,会抛出异常

(1)、服务器事件

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供操作,后续响应报文以只读流的方式提供。 (5) HTTP客户端事件 response:与服务端的request事件对应的客户端在请求发出后得到响应时触发该事件。 socket:当底层连接池中建立的连接分配给当前请求对象时触发; connect:当客户端向服务器发送CONNECT请求时,若服务端响应了200状态码,客户端将会触发该事件。 upgrade:客户端享服务端发送Upgrade请求时,若服务端响应了101 Switching Protocols状态,客户端将会触发该事件。 continue:客户端向服务端发起Expect: 100-continue头信息后,以试图发送较大数据,若服务端响应100 continue状态,服务端将触发该事件

连接事件

服务器可以同时与多个客户端保持连接,每个连接都是可读写的stream对象,用于服务器和客户端通信

  1. data 当一端调用write()发送数据时,另一端触发data事件
  2. end 任意一端发送了FIN数据时触发
  3. connect 用于客户端,当套接字与服务端连接成功时触发
  4. error 发生异常
  5. close 套接字完全关闭时触发
  6. timeout 连接在一定时间内部活跃,触发
//使用pipe管道 管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

var net = require('net');
var server = net.createServer(function(socket) {
    socket.write('Echo serverrn');
    socket.pipe(socket);//
});
server.listen(1337, '127.0.0.1');

Nagle算法:将tcp中的小数据包缓存合并到一定数量或时间后发出,避免浪费网络资源,但数据可能被延迟。tcp默认启动Nagle算法,可以调用socket.setNoDelay(true)关闭,关闭后一端调用write(),另一端可能将多个小数据包合并后触发一次data

对于通过net.createServer()创建的服务器而言,它是一个EventEmitter实例,自定义事件有以下几种:

WebSocket服务

WebSocket最早是作为HTML5重要特性出现的,相比HTTP有以下优点: (1) 客户端和服务端只建立一次TCP连接,可以使用更少的连接 (2) WebSocket服务端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效 (3) 更轻量级的协议头,减少数据传输 Node中没有内置WebSocket的库,但社区的ws模块封装了WebSocket的底层实现如著名的socket.io

Node提供丰富的网络编程模块 Node模块 协议 net TCP dgram UDP http HTTP https HTTPS TCP服务 TCP服务事件分为下面两类 (1)、...

UDP服务

  • 用户数据包协议,网络传输层
  • 一个套接字可以和多个UDP服务通信,无须连接,资源消耗低,处理快速灵活
  • 可能丢包,应用在低丢包不影响的的场景,视频、DNS

listening :在调用listen()绑定端口或Domain Socket后触发,简写为server.listen(port, listener),通过第二个参数传入。

创建UDP套接字

UDP套接字可以做客户端也可做服务端

  • 作为服务端 调用dgram.bind(port,[address])方法对网卡和端口绑定
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on("message", function(msg, rinfo) {
    console.log("server got: " + msg + " from " +
        rinfo.address + ":" + rinfo.port);
});
server.on("listening", function() {
    var address = server.address();
    console.log("server listening " + address.address + ":" + address.port);
});
server.bind(41234);//绑定完成后触发listening事件
  • 作为客户端:使用dgram.send(buf, offset, length, port, address, [callback])发送消息到网络;参数对应含义,buffer,buffer偏移,buffer长度,目标端口,目标地址,发送完成后的回调。它可以随意发送数据到网络,tcp需要重新通过套接字构建新连接
var dgram = require('dgram');
var message = new Buffer("Node.js");
var client = dgram.createSocket("udp4");
client.send(message, 0, message.length, 41234, "localhost", function(err, bytes) {
    client.close();
});

connection :每个客户端套接字连接到 服务器 时触发,简洁写法为通过net.createServer(),最后一个参数传递。

UPD套接字事件

  • UDP是个EventEmitter实例使用更简单,TCP是个Stream实例
  1. message UDP套接字帧听网卡端口后,接受数据时触发,触发携带的数据为Buffer对象和远程地址
  2. listening UDP开始帧听时触发
  3. close 调用close()时触发,并不再触发message事件
  4. error 异常时触发,不帧听则直接抛出,进程退出

close :当服务器关闭时触发,在调用server.close()后,服务器将停止接受新的套接字连接,但保持当前存在的连接,等待所有连接断开后,会触发该事件。

构建HTTP服务

  • 超文本传输协议 HyperText Transfer Protocol
  • 构建在TCP之上 属于应用层协议 B/S模式,目前最知名的标准RFC 2616

通常的http通信的信息分三部分,TCP的3次握手,客户端向服务器发送请求报文,服务器完成处理后向客户端发送响应内容。
浏览器其实是http的代理,将用户的行为转化为http请求发送给服务端,服务端处理请求然后发送响应报文给代理,代理解析报文再展示给用户。http服务只做处理http请求和发送http响应

error :当服务器发生异常时,将会触发该事件。

http模块

  • 继承自TCP服务(net模块)
  • 能够与多个客户端保持连接,因为采用事件驱动,不用给每个连接创建额外的线程、进程,内存占用低,能高并发
  • tcp以connection为单位服务,http以request为单位服务

http模块将tcp连接的读操作封装为ServerRequest对象,报文头部使用http_parser解析然后放在req.headers上传递给业务逻辑。报文体部分为只读流对象,需要在数据流结束后转字符串

function(req, res) {
    // console.log(req.headers);
    var buffers = [];
    req.on('data', function(trunk) {
        buffers.push(trunk);
    }).on('end', function() {
        var buffer = Buffer.concat(buffers); // TODO
        res.end('Hello world');
    });
}
//express中使用bodyParse,会自动解析,但要求请求头添加Content-Type=application/json

封装对底层连接的写操作为ServerResponse对象
影响响应报文头api为res.setHeader()res.writeHead(),可以调用res.setHeader()进行多次设置,只要调用writeHead后,报头才会写入连接

res.writeHead(200, {'Content-Type': 'text/plain'});

设置报文体API为write(),end();end()会先调用write()发送数据,再发信号告知响应结束。

一旦开始了数据发送,writeHead()和setHeader()将不再生效
结束时要调用res.end(),否则客户端将一直处于等待状态,无论异常与否

(2)、连接事件

http服务端事件

http服务器是个EventEmitter实例

  • connection 客户端与服务器建立底层的tcp连接时触发。连接开启keep-alive,可以在多次请求响应之间使用
  • request 当请求数据发送到服务端,在解析出http请求头后触发该事件
  • close 调用server.close()方法停止接受新连接,当已有的连接也都断开后触发,可以给server.close()传个回调来快速注册该事件
  • checkContinue 某些客户端在发送大数据时,会先发一个头部带Expect: 100-continue的请求,服务器接收后触发checkContinue。如果不监听,就自动回复100 Continue。如果不接收就响应400 Bad Request。注意,在客户端收到100 Continue后重新发起请求才会触发request
  • connect 客户端发起connect请求时触发,通常在http代理时才会发起connect,如果不监听,发起该请求的连接会关闭
  • upgrade 客户端要升级连接协议时会在请求头部带上upgrade,服务端接收后触发,如果不监听,发起该请求的连接会关闭
  • clientError 连接的客户端触发error事件,会传递到服务器端并触发

服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可写可读Stream对象。Stream对象可以用于服务端和客户端之间的通信,既可以通过data事件从一端读取另一端发来的数据,也可以通过write()方法从一端向另一端发送数据。

http客户端

  • http.request(options, connect) 构建http客户端
var options = {
    hostname: '127.0.0.1',
    port: 1334,
    path: '/',
    method: 'GET',
    localAddress //建立连接的本地网卡
    socketPath //Domain套接字路径
    headers //请求头对象
    auth //Basic认证 将被计算成请求头的Authorization部分
};
// 用request 包请求 不用自己来处理on end 
var req = http.request(options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function(chunk) {
        console.log(chunk);
    });
});

req.end();

报文体的内容通过请求对象的write()写入,end()告知报文结束
客户端clientRequest(req)解析完响应头就触发response,并传递ClientResponse以供操作,之后报文体以只读流提供)

data :当一端调用write()发送数据时,另一端会触发data事件,事件传递的数据就是write()发送的数据

http代理
  • 为了重用tcp连接(在keeplive时,一个tcp连接可以多次用于请求)
  • http里包含一个客户端代理对象http.globalAgent,它管理每个服务端(host+port)创建的连接并创建一个连接池,默认每个服务器端5个连接

在通过ClientRequest调用http请求时会走代理。可以在options中传递agentX修改连接限制

var agent = new http.Agent({
    maxSockets: 10 
});
var options = {
    hostname: '127.0.0.1',
    port: 1334,
    path: '/',
    method: 'GET',
    agent: agent //设置为false就不受连接池限制
};

end :当连接中的任意一端发送FIN数据时,将会触发该事件。

http客户端事件
  • response 客户端得到响应后触发
  • socket 当连接池中建立的连接分配给当前的对象时触发
  • upgrade 客户端向服务端发起upgrade 服务端响应101 Switching Protocols时触发
  • continue 客户端想发大数据,头部带Expect: 100-continue,服务端同意并响应100 continue时触发

connect :该事件用于 客户端 ,当套接字与服务器连接成功时会触发。

drain :当任意一端调用write()发送数据时,当前这端触发该事件。

error :当异常发送

close :当套接字完全关闭时触发

timeout :当一定时间后连接不再活跃时,触发该事件通知用户该连接被闲置了。

TCP针对网络中的小数据包有一定优化策略:Nagle算法,当数据达到一定量后才触发。

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供操作,后续响应报文以只读流的方式提供。

(5) HTTP客户端事件

response :与服务端的request事件对应的客户端在请求发出后得到响应时触发该事件。

socket :当底层连接池中建立的连接分配给当前请求对象时触发;

connect :当客户端向服务器发送CONNECT请求时,若服务端响应了200状态码,客户端将会触发该事件。

upgrade :客户端享服务端发送Upgrade请求时,若服务端响应了101 Switching Protocols状态,客户端将会触发该事件。

continue :客户端向服务端发起Expect: 100-continue头信息后,以试图发送较大数据,若服务端响应100 continue状态,服务端将触发该事件

WebSocket服务

WebSocket最早是作为HTML5重要特性出现的,相比HTTP有以下优点:

(1) 客户端和服务端只建立一次TCP连接,可以使用更少的连接

(2) WebSocket服务端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效

(3) 更轻量级的协议头,减少数据传输

Node中没有内置WebSocket的库,但社区的ws模块封装了WebSocket的底层实现如著名的socket.io

您可能感兴趣的文章:

  • Nodejs学习笔记之Global Objects全局对象
  • Nodejs学习笔记之NET模块
  • Nodejs学习笔记之Stream模块
  • NodeJS学习笔记之Http模块
  • NodeJS学习笔记之FS文件模块
  • NodeJS学习笔记之(Url,QueryString,Path)模块
  • NodeJS学习笔记之MongoDB模块
  • NodeJS学习笔记之Connect中间件模块(一)
  • NodeJS学习笔记之Connect中间件模块(二)
  • NodeJS学习笔记之Connect中间件应用实例

本文由美高梅网址发布于计算机网络,转载请注明出处:网络编程,NodeJS学习笔记之网络编程

上一篇:9为例也可以是a,js随机密码产生函数 下一篇:基于JavaScript实现图片剪切效果,利用Javascript裁剪
猜你喜欢
热门排行
精彩图文