搭建最简单的socket服务端和客户端,这篇文章主要是了解net.socket对象是如何作为流的。net.socket官网说明继承自:此类是TCP套接字或流式IPC端点的抽象(在Windows上使用命名管道,否则使用Unix域套接字)。它也是一个EventEmitter。net.Socket可以由用户创建并直接与服务器交互。例如,它由net.createConnection()返回,因此用户可以使用它与服务器通信。它也可以由Node.js创建并在收到连接时传递给用户。例如,将它传递给net.Server上触发的“连接”事件的侦听器,以便用户可以使用它与客户端进行交互。先贴代码client.js//1importmoduleconstnet=require('net');constreadline=require('readline');//2创建socket和输入输出命令行letrl=readline.createInterface({//调用std接口input:process.stdin,output:process.stdout})letclient=newnet.Socket();//3linksclient.connect(800,'localhost');client.setEncoding('utf8');client.on('data',(chunk)=>{console.log('shoudao:',chunk)})client.on('error',(e)=>{console.log(e.message);})//绑定输入输出流事件,获取输入输出字符rl.on('line',(mes)=>{client.write(mes);})server.js//1导入模块constnet=require('net');//2创建服务器letclientArr=[];constserver=net.createServer();//3绑定连接事件server.on('connection',(person)=>{console.log(clientArr.length);//记录链接过程person.id=clientArr.length;clientArr.push(person);//person.setEncoding('utf8');//客户socket进程绑定事件person.pipe(clientArr[0])person.on('close',(p1)=>{clientArr[p1.id]=null;})person.on('error',(p1)=>{clientArr[p1.id]=null;})})server.listen(800);console.log('创江ok')client.jscclient对象和server.js可以作为一个stream来使用,而且是双工stream。在server.js中,我使用person.pipe(clientArr[0])来写。这个独立流和可写流是一一对应的。事实上,它不适合广播。可以修改为:person.on('data',(chunk)=>{console.log(chunk);clientArr.forEach((val)=>{//writedatatoallclientprocessesval.write(chunk);})关于streaming的介绍可以参考下面的文章