文章目录
前言
上一篇介绍了node.js的http模块,展示了如何通过node.js建立一个简单的服务器,实际上http是在net模块基础上封装而来,底层使用的还是net模块,尤其是通信中使用的TCP/IP协议和socket。
nodejs commonjs介绍
nodejs fs模块介绍
nodejs path模块介绍
nodejs events模块介绍
nodejs http模块介绍
net既可以创建服务器,还可以模拟客户端
就好像http模块里,既可以http.createServer() 又可以请求 http.request()
服务器端
var net = require("net");
const PORT = 3000;
const HOST = "127.0.0.1";
const netServer = net.createServer(function (socket) {
// 当服务器端收到客户端发的数据时触发
socket.on("data", function (data) {
console.log(`服务器收到来自客户端的数据${
data}`);
// ....处理完数据后,需要给客户端返回些什么
socket.write("数据收到,已经处理");
});
socket.on("close", function () {
console.log("服务端:客户端已经断开连接");
});
});
netServer.listen(PORT, HOST, function () {
console.log("服务器启动,开始监听来自客户端的请求");
});
客户端
var net = require("net");
const PORT = 3000;
const HOST = "127.0.0.1";
// 客户端开始连接服务器,如果服务器未开或者不存在会报错
const socket = net.createConnection(PORT, HOST, function(){
console.log('客户端连接服务器')
});
// 客户端开始与服务端建立连接并成功时触发
socket.on('connect',function(){
console.log('建立连接成功')
})
//客户端收到来自服务器的数据时触发
socket.on('data',function(data){
console.log(`客户端收到来自服务端的:${
data}`)
})
// 客户端主动断开与服务器端的连接时触发 socket.end()
socket.on('close',function(data){
console.log('客户端:我要断开连接')
})
// 客户端向着服务端发送信息
socket.write('客户端:hello,服务端')
// 客户端向服务端发信息,并结束连接
socket.end('客户端:服务器再见')
服务端
服务器启动,开始监听来自客户端的请求
服务器收到来自客户端的数据客户端:hello,服务端 客户端:服务器再见
务务端:客户端已经断开连接
客户端
客户端连接服务器
建立连接成功
客户端收到来自服务端的:数据收到,已经处理
客户端:我要断开连接
server常用的事件 listening/connection/close/error
listening:调用 server.listen(),正式开始监听请求的时候触发。
connection:当有新的请求进来时触发,参数为请求相关的 socket。
close:服务端关闭的时候触发。
error:服务出错的时候触发,比如监听了已经被占用的端口。
var net = require("net");
const PORT = 3000;
const HOST = "127.0.0.1";
const netServer = net.createServer(function (socket) {
...
});
netServer.on('listening', ...)
netServer.on('connection', ...)
netServer.on('close', ...)
netServer.on('error', ...)
socket常用事件 close/connect/data/end/error
// 客户端开始连接服务器,如果服务器未开或者不存在会报错
const socket = net.createConnection(PORT, HOST, function(){
console.log('客户端连接服务器')
});
// 客户端开始与服务端建立连接并成功时触发
socket.on('connect',function(){
console.log('建立连接成功')
})
//客户端收到来自服务器的数据时触发
socket.on('data',function(data){
console.log(`客户端收到来自服务端的:${
data}`)
})
// socket报错或者结束时触发
socket.on('close',function(data){
console.log('客户端:我要断开连接')
})
// 当 socket 的另一端发送一个 FIN 包的时候触发,从而结束 socket 的可读端。
socket.on('end',function(){
console.log('服务器端断开了连接')
})
// 当错误发生时触发。'close' 事件也会紧接着该事件被触发。
socket.on('error',function(){
console.log('出错了')
})
socket属性和api
连接相关
-
socket.connect():有3种不同的参数,用于不同的场景;
-
socket.setTimeout():用来进行连接超时设置。
-
socket.setKeepAlive():用来设置长连接。
-
socket.destroy()、socket.destroyed:当错误发生时,用来销毁socket,确保这个socket上不会再有其他的IO操作。
数据读、写相关
- socket.write(data[, encoding][, callback]) 在 socket 上发送数据。第二个参数制定了字符串的编码 - 默认是 UTF8 编码。
- socket.end([data][, encoding]) 半关闭 socket。例如发送一个 FIN 包。服务端仍可以发送数据。
- socket.pause() 暂停读写数据。也就是说,[‘data’][] 将不会再被触发。可以用于上传节流。
- socket.resume() 在调用 [socket.pause()][] 之后恢复读取数据。
- socket.setEncoding() 设置作为可读流([Readable Stream][])的编码。在 [stream.setEncoding()][] 查看更多详情。
数据属性相关
- socket.bufferSize 此属性显示当前即将被写入的缓冲的字符数,如果数值过大,可能会造成堵塞,对处理大量或持续增长的 bufferSize 有经验的用户应该注意使用 [socket.pause()][] and [socket.resume()][] 对他们程序中的数据流进行节流。
- socket.bytesRead 接收的字节数量。
- socket.bytesWritten 发送的字节数量。
地址相关
-
socket.address()
-
socket.remoteAddress、socket.remoteFamily、socket.remotePort
-
socket.localAddress/socket.localPort
nodejs其它内容介绍
nodejs commonjs介绍
nodejs fs模块介绍
nodejs path模块介绍
nodejs events模块介绍
nodejs http模块介绍