TCP是用来计算机之间进行通讯的,经过编写客户端和服务端聊天的代码,对于服务器与客户端的工做步骤有了深入的了解。在node中为了实现TCP,提供了一个net
模块,net
模块给你提供了一个异步的网络封装,它包含建立服务器和客户端(称为流)的功能。javascript
建立一个tcp服务,里面放的是回调函数 监听函数,当链接到来时才会执行。html
其中传进去的参数socket是套接字,帮咱们实现会话,每个客户端对应的socket都是不同的。是一个duplex双工流,能够支持读操做和写操做。java
能够设置服务监听的端口,主机名, backlog服务端处理的最大请求,默认是511,能够不写。还有回调函数,当服务启动成功会调用node
let net = require('net'); let server = net.createServer(function(socket){ ... }) server.listen(8080,'localhost',function(){ console.log(`server start 8080`) });
接下来能够对服务端进行配置数组
server.maxConnections = 6;
但愿每次请求到来时都有一个提示,当前最大链接多少个,如今一共链接多少个服务器
server.getConnections(function(err,count){ socket.write(`当前最大容纳${server.maxConnections},如今${count}人`) });
socket.on('data',function(data){ console.log(data); });
socket.pause();
socket.resume();
监听客户输入时,将客户端输入的内容写入到文件内容。网络
若是有两个客户端,就有两个socket,其中一个关闭了,另外一个就写不进去了app
let net = require('net'); let path = require('path'); let ws = require('fs').createWriteStream(path.join(__dirname,'./1.txt')); let server = net.createServer(function(socket){ socket.pipe(ws,{end:false}); // 因此能够设置这个可写流不关闭 setTimeout(function(){ ws.end(); // 关闭可写流 socket.unpipe(ws); // 取消管道,就不能传输了 },5000) }); server.listen(8080);
close事件表示服务端不在接收新的请求了,当前的还能继续使用,当客户端所有关闭后会执行close事件。异步
// close事件只有调用close方法才会触发 server.on('close',function(){ console.log('服务端关闭'); })
unref() 不会触发close事件,只有当全部客户端都关闭了,服务端才关闭,若是有人进来(有新请求)仍然能够。socket
let net = require('net'); let socket = net.createConnection({port:8080},function(){ socket.write('hello'); socket.on('data',function(data){ console.log(data); }); });
node中为了实现http一样也提供了一个模块,叫http模块,其中封装了高效的http服务器和http客户端 ,与net模块用法类似。
当客户端请求到来的时候,该事件被触发。
咱们最经常使用的仍是request
事件,http也给这个事件提供了一个捷径:http.createServer([requestListener])
。
传入中的参数req是请求,是一个可读流,res是响应 是一个可写流。是经过socket解析出来请求和响应。
建立HTTP服务器有两种方法
let http = require('http'); let server = http.createServer(); server.on('request',function(req,res){ req.on('end',function(){ res.write('hello'); res.end('world'); }); }); server.listen(8080);
let http = require('http'); let server = http.createServer(function(req,res){ res.end('ok'); }); server.listen(8080);
let http = require('http'); let server = http.createServer(function(req,res){ }); server.on('close',function(){ console.log('服务器关闭'); }); server.listen(8080,'127.0.0.1',function(){ console.log('服务器端开始监听!') server.close(); // 关闭 });
http 模块提供了两个函数 http.request 和 http.get,功能是做为客户端向 HTTP服务器发起请求。
let http = require('http'); let options = { hostname:'localhost', port:4000, path: '/', method:'get', // 告诉服务端我当前要给你发什么样的数据 headers:{ 'Content-Type':'application/x-www-form-urlencoded', 'Content-Length':17 } } let req = http.request(options); // 当客户端收到服务器响应的时候触发 req.on('response',function(res){ res.on('data',function(chunk){ console.log(chunk); }); }); req.end('name=renee&&age=18');
var http = require('http'); http.createServer(function(req,res){}).listen(3000); http.get('http://www.baidu.com/index.html',function(res){ console.log('get response Code :' + res.statusCode); }).on('error',function(e){ console.log("Got error: " + e.message); })