1 Star 0 Fork 0

陈迅/node-study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
server.js 1.67 KB
一键复制 编辑 原始数据 按行查看 历史
陈迅 提交于 2022-05-22 16:06 . feat: 创建一个http服务器
const net = require('net') // 实现了底层通信接口;http模块是专门用来做http服务的
const MyTransform = require('./myTransform.js') // 添加后缀提高加载速度
// 创建服务端实例
const server = net.createServer()
let overageBuffer = null // 存储没处理完的数据
let ts = new MyTransform()
const RORT = 1234
const HOST = 'localhost'
server.listen(RORT, HOST)
server.on('listening', () => { // 调用listen方法后触发
console.log(`服务端已经开启在${HOST}: ${RORT}`);
})
// 接收消息
server.on('connection', (socket) => { // 每有一个新连接建立都会走这里
socket.on('data', (chunk) => {
if (overageBuffer) {
chunk = Buffer.concat([overageBuffer, chunk])
}
let packageLen = 0
while (packageLen = ts.getPackageLen(chunk)) {
const packageCon = chunk.slice(0, packageLen)
// console.log(packageCon); // <Buffer 00 00 00 0a e5 ae a2 e6 88 b7 e7 ab af 31>
chunk = chunk.slice(packageLen) // 因为是循环,截掉上一次拿到的内容
const ret = ts.decode(packageCon)
socket.write(ts.encode(ret.body, ret.serialNum))
console.log(ret);
}
overageBuffer = chunk
// const msg = chunk.toString()
// console.log(msg); // 您好客户端1您好客户端2客户端3客户端4
// socket.write(Buffer.from('您好' + msg))
})
})
server.on('close', () => {
console.log('服务端关闭了');
})
server.on('error', (err) => {
if (err.code == 'EADDRINUSE') {
console.log('地址正在被使用'); // 可做重启操作
} else {
console.log(err);
}
})
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/chenxun98/node-study.git
git@gitee.com:chenxun98/node-study.git
chenxun98
node-study
node-study
master

搜索帮助