nodejs环境下的socket通信

本文介绍了Node.js环境下如何进行socket通信,强调了socket作为应用层和传输层桥梁的角色,涉及建立长久链接以便两个进程间通信。通过示例代码展示了server端如何监听并管理客户端连接,以及client端如何发起连接。相较于HTTP的短连接,socket维持的是长连接,适用于需要频繁交互的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构:

socket是应用层和传输层的桥梁。(传输层之上的协议所涉及的数据都是在本机处理的,并没进入网络中)

涉及数据:

socket所涉及的数据是报文,是明文。

作用:

建立长久链接,供网络上的两个进程通信。

nodejs环境下的简单通信。

代码:

serve:

// 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 . on ( 'data' ,( chunk ) => {
console . log ( chunk );
clientArr . forEach (( val ) => {
// 数据写入全部客户进程中
val . write ( chunk );
})
})
person . on ( 'close' ,( p1 ) => {
clientArr [ p1 . id ] = null ;
} )
person . on ( 'error' ,( p1 ) => {
clientArr [ p1 . id ] = null ;
})
})
server . listen ( 800 );

client:

// 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 ) => {

})
client . on ( 'error' ,( e ) => {
console . log ( e . message );
})
// 绑定输io流事件,获取输入输出字符
rl . on ( 'line' ,( mes ) => {
client . write ( mes );
})

小结:

server端:绑定连接事件 --> 在连接事件中管理客户端进程对象(1,把添加到数组中 2,处理客户端发来的数据)-->开启端口监听请求 。

client端:创建连接服务器用的套接字 --> 连接服务器 。

socket建立的连接是长久连接。而应用层的http协议是3次握手协议,是短连接。

socket工作原理和http类似,只是不规定断开连接的时间。可以把http理解成一个人办一件事情就跑一次连接流程。socket理解成只跑一次连接流程,只到把所有的事情都做完了才回去。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值