TCCPTCP用于计算机之间的通信。通过编写客户端和服务端聊天的代码,深刻理解了服务端和客户端的工作步骤。为了在node中实现TCP,提供了一个net模块。net模块为您提供了一个异步网络包,其中包括创建服务器和客户端(称为流)的功能。创建一个TCP服务器net.createServer(options,connectionListener);创建一个tcp服务,其中包含一个回调函数listener函数,当连接到达时执行。传入的参数socket是一个socket,帮助我们实现session,每个client对应的socket都不一样。它是双工双工流,可以支持读写操作。server.listen()可以设置服务的监听端口、主机名、backlog服务器处理的最大请求。默认为511,可以省略。还有一个回调函数,当服务启动成功时会被调用letnet=require('net');letserver=net.createServer(function(socket){...})server.listen(8080,'localhost',function(){console.log(`serverstart8080`)});接下来可以配置服务器,设置服务器最大连接数server.maxConnections=6;获取连接时,触发方法希望每次请求到来时都有一个提示,当前最大连接数是多少,现在总共有多少个连接);接受客户端数据以读取客户端输入socket.on('data',function(data){console.log(data);});暂停阅读socket.pause();resumereadingsocket.resume();pipe&unpipe监听客户端输入时,将客户端输入的内容写入文件内容。如果有两个client,则有两个socket,其中一个是关闭的,另一个不能写在letnet=require('net');letpath=require('path');letws=require('fs').createWriteStream(path.join(__dirname,'./1.txt'));letserver=net.createServer(function(socket){socket.pipe(ws,{end:false});//所以你可以设置这个可写流不关闭setTimeout(function(){ws.end();//关闭可写流socket.unpipe(ws);//取消管道,你不能传输它},5000)});server.listen(8080);关闭客户端socket.end();除了手动关闭,我们还可以调用这个方法让它关闭。关闭服务器server.close();关闭事件表示服务器不再接收新的请求,可以继续使用当前的请求。当所有客户端都关闭时,将执行关闭事件。//只有调用了close方法才会触发close事件,只有当所有的client都关闭了,server也关闭了,如果有人进来(有新的请求)还是有可能的。创建TCP客户端net.createConnection用于创建到服务器的连接letnet=require('net');letsocket=net.createConnection({port:8080},function(){socket.write('hello');socket.on('data',function(data){console.log(data);});});为了实现http,HTTPnode还提供了一个名为http模块的模块,里面封装了一个高效的http服务器和http客户端,类似于net模块的用法。创建HTTP服务器请求。当客户端请求到达时,将触发此事件。最常用的事件就是request事件,http也为这个事件提供了一个快捷方式:http.createServer([requestListener])。传入参数res中的参数req是request,是可读流,res是response,是可写流。请求和响应通过套接字进行解析。有两种创建HTTP服务器的方法第一种lethttp=require('http');letserver=http.createServer();server.on('request',function(req,res){req.on('end',function(){res.write('hello');res.end('世界');});});server.listen(8080);可以像这样缩短lethttp=require('http');letserver=http.createServer(function(req,res){res.end('ok');});server.listen(8080);关闭HTTP服务器lethttp=require('http');letserver=http.createServer(function(req,res){});server.on('close',function(){console.log('serverclosed');});server.listen(8080,'127.0.0.1',function(){console.log('服务器开始监听!')server.close();//关闭});创建HTTP客户端http模块提供了两个函数http.request和http.get,作为客户端向HTTP服务器发起请求。http.request(options,callback)发起HTTP请求。接受两个参数,option是一个类似于关联数组的对象,代表请求的参数,callback是请求的回调函数。lethttp=require('http');letoptions={hostname:'localhost',port:4000,path:'/',method:'get',//告诉服务器我现在想给你发什么数据头:{'Content-Type':'application/x-www-form-urlencoded','Content-Length':17}}letreq=http.request(options);//当客户端收到服务器响应时触发req.on('response',function(res){res.on('data',function(chunk){console.log(chunk);});});req.end('name=renee&&age=18');http.get(options,callback)http模块还提供了一个更方便的处理GET请求的方法:http.get。是http.request的简化版,唯一不同的是http.get自动设置请求方式为GET请求,无需手动调用req.end()。varhttp=require('http');http.createServer(function(req,res){}).listen(3000);http.get('http://www.baidu.com/index.html',function(res){console.log('getresponseCode:'+res.statusCode);}).on('error',function(e){console.log("Goterror:"+e.message);})
