网络模块(net, http)小解

net模块可用来创建TCP服务器来接收网络请求,它提供了创建客户端以及服务端的方法

服务端:

创建服务器:

net.createServer([,options], connectionListener)

option 默认值 {allowHalfOpen: false, pauseOnConnect: false}

connectionListener创建服务器时自动为connection事件添加监视器

eg:

var net = require('net');
//创建服务端对象server,为connection事件添加监视器,socket是服务端的socket对象
var server = net.createServer(function(socket) { //'connection' listener console.log('client connected'); socket.on('end', function() { console.log('client disconnected'); });
 //传给客户端 socket.write(
'hello '); socket.pipe(socket); });
//为listening事件添加监视器 server.listen(
8124, function() { //'listening' listener console.log('server bound'); });

也可以写作:

var net = require('net');
var server = net.createServer();

server.on('connection', function(socket){
  console.log('client connected');
  console.log(socket);
  //客户端断开连接时触发
  socket.on('end', function() {
    console.log('client disconnected');
  });
  //客户端输出
  socket.write('hello
');
  socket.pipe(socket);
})
//'listening' 事件监听器,监听端口成功时触发
server.listen(8124, function() { 
  console.log('server bound');
});

服务端(server)事件如下:

listening: 绑定端口

connection: 每个客户端socket连接到服务器时触发

close: 服务端关闭

error: 服务端发生异常

---------------------------------

连接事件(socket)如下:

data: 当一端调用write()发送数据时,另一端触发

end: 当连接中任意端发送了FIN数据,两端都触发

connect: 用于客户端,socket与服务端连接成功时触发

drain: 任一端调用write()时,当前这端触发

error: 异常发生

close: socket完全关闭

timeout: 当一定时间后连接不再活跃是触发,通知用户此连接以被闲置

******************************************************************************************

客户端:

创建客户端,连接服务端

net.connect(options, [, connectionListener])

options:

port 客户端连接到port的端口,必填

host 客户端连接到的主机,默认localhost

eg:

var net = require('net');
//client是一个socket对象
var client = net.connect({port: 8124},
  //connect监视器
function() { console.log('connected to server!'); client.write('world! '); //服务端的hello会在world之前输出 }); client.on('data', function(data) { console.log(data.toString()); client.end(); }); client.on('end', function() { console.log('disconnected from server'); });

备注: socket是一个可读可写的stream对象,Tcp协议是面向连接的

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

http

创建服务器:

http.createServer([requestListener])

eg:

var http= require("http");
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World
');
}).listen(1337, '127.0.0.1');

解析:

请求部分(req), 请求头信息:

req.method 请求类型

req.url url地址

req.httpVersion http协议版本

req.headers: 请求头信息里的请求头对象(headers)

类型: 只读流

响应部分(res):

res.writeHead()分为res.setHeader()与res.writeHead()两部分,两者都是定义头信息,但只有调用后者时才会写入连接

res.write(),res.end()都是定义文体部分,后者会发送信号告知服务器这次响应结束

*********************************************************************************************************

创建客户端

http.request(options, connect)

eg:

var options= {
    hostname: "127.0.0.1",
    port: 1334,
    path: "/",
    method: "GET"
};
var req= http.request(options, function(res){
    console.log(res.statusCode);
    console.log("HEADERS:"+ JSON.stringify(res.headers));
    res.serEncoding('utf8');
    res.on("data", function(chunk){
        console.log(chunk);
    })
});
res.end();

options包含请求头信息,包括

host: 服务器域名或IP地址,默认localhost

hostname: 服务器名称

port: 服务器端口

...

headers:请求头对象

request的write(),end()与浏览器的ajax调用几近相同

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/yanze/p/6093251.html