nodejs socket 笔记

码农天地 -
nodejs socket 笔记

搭建最简单的socket 服务端和客户端,这次的文章主要是明白net.socket的对象作为流是如何发挥作用的
net.socket官网描述是这样的

继承自: <stream.Duplex>

此类是 TCP 套接字或流式 IPC 端点的抽象(在 Windows 上使用命名管道,否则使用 Unix 域套接字)。 它也是一个 EventEmitter

net.Socket 可以由用户创建并且直接地与服务器进行交互。 例如,它由 net.createConnection() 返回,因此用户可以使用它与服务器进行通信。

它也可以由 Node.js 创建,并在收到连接时传给用户。 例如,将它传给 net.Server 上触发的 'connection' 事件的监听器,因此用户可以使用它与客户端进行交互。

先贴一下代码

client.js
 // 1 引入模块
const net = require('net');
const readline = require('readline');
// 2 创建套接字和输入输出命令行
let rl = readline.createInterface({
// 调用std接口
input:process.stdin,
output:process.stdout
})
let client = new net.Socket();
// 3 链接
client.connect(800,'localhost');

client.setEncoding('utf8');
client.on('data',(chunk)=>{
   console.log('shoudao:',chunk)
})
client.on('error',(e)=>{
console.log(e.message);
})
// 绑定输io流事件,获取输入输出字符
rl.on('line',(mes)=>{
client.write(mes);
})
server.js
// 1 引入模块
const net = require('net');
// 2 创建服务器
let clientArr = [];
const server = 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('chuangjiang ok')

client.js中client对象和server.js就可以当成流使用,而且是个双工流。server.js中我是用person.pipe(clientArr[0])的写法这种可独流和可写流是一一对应的。其实不适合用来做广播。你可以修改成下面这种写法:

person.on('data',(chunk)=>{
console.log(chunk);
clientArr.forEach((val)=>{
// 数据写入全部客户进程中
val.write(chunk);
})

关于流的介绍可以参考下面的文章

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。
上一篇: CORS

Tags 标签

加个好友,技术交流

1628738909466805.jpg