nodejs环境下的socket通信

结构:

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

涉及数据:

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

作用:

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

nodejs环境下的socket通信_第1张图片

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理解成只跑一次连接流程,只到把所有的事情都做完了才回去。


你可能感兴趣的:(nodejs,通信接口学习)