Node.js
文章平均质量分 59
Anita-Sun
Gods in his heaven, all's rights with the world
展开
-
解决 socket.io 频繁连接导致 cpu 升高问题
前提如果前端频繁刷新页面或者频繁断开重连将会导致服务端 cpu 升高解决方法使用 localStorage 缓存连接,每次通信都使用这个连接代码let socket;if(localStorage.getItem('socket')) { socket = JSON.parse(localStorage.getItem('socket')); // 创建一个不自动连接的 socket 对象 let temp = io({autoConnect: false});原创 2022-05-17 23:39:25 · 2045 阅读 · 0 评论 -
ubuntu 18.04 安装 Redis
ubuntu 18.04 安装 RedisRedis 安装Redis 是一款内存键值存储,以其灵活性,性能和广泛的语言支持而闻名。本教程将演示如何在 Ubuntu 18.04 服务器上安装和配置 Redis。主要内容包括:安装 RedisRedis 配置Redis 控制一、安装 Redis使用 apt 从官方 Ubuntu 存储库来安装 Redis:$ sudo apt update$ sudo apt install redis-server二、Redis 配置打开 Redis原创 2022-04-19 12:53:05 · 1027 阅读 · 0 评论 -
ubuntu下配置nginx实现反向代理服务
编辑 /etc/nginx/sites-available/defaultvi /etc/nginx/sites-available/default将以下内容复制到 default 文件中修改你需要监听的端口号# This file will automatically load configuration files provided by other# applications, such as Drupal or Wordpress. These applications will be .原创 2022-04-15 16:46:04 · 6745 阅读 · 0 评论 -
Linux下的MongoDB安装&启动&关闭
https://developer.aliyun.com/article/668662原创 2022-04-15 11:44:10 · 767 阅读 · 0 评论 -
将 AsyncResource 用于工作线程池
参考自官方文档原创 2022-03-17 15:28:33 · 274 阅读 · 0 评论 -
用户环境 process.env
查看打开 cmd输入 node,回车输入 process.env就可以看到所有属性文档http://nodejs.cn/api/process/process_env.html内容process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程process.env属性返回一个包含用户环境信息的对象Windows 配置临时配置#node中常用的到的环境变量是NODE_ENV,首先查看是否存在 set NODE_ENV #如果不存在则原创 2022-01-24 00:21:39 · 523 阅读 · 0 评论 -
将单体架构改变为微服务【失败】
云函数控制台https://console.cloud.tencent.com/tcb/scf/index?envId=elm-node-3gqd1djs55989a82&rid=4&function=getCities&reqId=null&tabId=function通过控制台实现云函数新建云函数可以通过在线编辑器进行编辑使用CLI工具文档https://cloud.tencent.com/document/product/876/41548原创 2022-01-23 09:51:12 · 2014 阅读 · 0 评论 -
部署 Express 应用到 Serverless
参考文档https://github.com/serverless-components/tencent-express安装通过 npm 安装最新版本的 Serverless Framework$ npm install -g serverless创建通过如下命令和模板链接,快速创建一个 Express 应用:$ serverless init express-starter --name example$ cd example部署在 serverless.yml 文原创 2022-01-21 14:51:04 · 1057 阅读 · 0 评论 -
JSON Web Token 教程 【JWT】
基于Session认证的缺点扩展性不好: 如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session解决方案:session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表JWT 的结构中间用.分隔成三个部分三个部分为: Header(头部) Payload(负载) Signature(签名)Header原创 2022-01-01 16:23:45 · 615 阅读 · 0 评论 -
HTTP Server 中的知识点
HTTPServer使用 Nodejs 编写,基于RESTful约定的 HTTPServer,目前支持:请求:GET、POST、PUT、DELETE、OPTIONS ✨状态码:200 201 206 304 400 401 403 404 500 ✨头部:If-None-Match、Content-Length、Range、Cookie、Authorization、Cache-Control、If-None-Match、Content-Range、WWW-Authenticate、Last-Mo原创 2021-12-30 16:00:52 · 241 阅读 · 0 评论 -
Windows 下实现域名映射绑定 IP
C:\Windows\System32\drivers\etc填入你想配置的东西原创 2021-12-30 14:15:13 · 1622 阅读 · 0 评论 -
云函数式工程实现
总体架构backend【服务器端】目录将不同的服务开在不同的端口workspace【工作空间】编写向后端的请求数据的必备参数对象【page.data.js】将上面的数据进行webpack打包到云函数中【在文件夹business\play中】【node build.js】bussiness 【云函数】bussiness\play\data.jsbussiness\play\template.tplserver【业务代码】目录代码原创 2021-12-29 20:33:40 · 415 阅读 · 0 评论 -
如何使用 VSCode 调试
选择Nodejs配置 program 为启动路径,默认未 package.json 中的 script.start 脚本添加断点启动调试node main.js原创 2021-12-29 19:16:17 · 751 阅读 · 0 评论 -
架构优化:反向代理与缓存服务
内容静态文件从CDN上获取,动态文件通过nginx反向代理到服务器端获取反向代理index.jsnode index.jsvi /etc/nginx/nginx.confnginx -s reload访问http://129.204.79.157/node/123负载均衡vi /etc/nginx/nginx.confindex.jsindex3001.jsnode index.jsnode idnex3001.jsnginx -s reload访问ht原创 2021-12-29 18:50:25 · 1125 阅读 · 0 评论 -
架构优化:动静分离
动静分离静态内容基本不会变动,也不会因为请求参数不同而变化-> CDN 分发,HTTP 缓存等动态内容各种因为请求参数不同而变动,且变种的数量几乎不可枚举-> 用大量的源站机器承载,结合反向代理进程负载均衡例使用 nginx 做一个接入,针对静态文件的路径会直接返回,如果是动态内容,会转发到一个 Nodejs使用 nginx首先检查 80 端口是否有被占用netstat -aon|findstr "80"如果有,杀掉它【也可以在任务管理器中杀死它】原创 2021-12-27 22:35:38 · 1347 阅读 · 2 评论 -
多进程优化:Nodejs cluster 模块 - 进程守护与管理
简单的进程守护器boot.js/** * 简单的进程守护器 */const cluster = require('cluster');// 如果是主进程if (cluster.isMaster) { // CPU 核数的一半为子进程总数 for (let i = 0; i < require('os').cpus().length / 2; i++) { createWorker(); } // 如果有子进程退出,5s之后重新创建一个子原创 2021-12-26 21:21:59 · 418 阅读 · 0 评论 -
多进程优化:Nodejs 子进程与线程
Nodejs 子进程与线程进程操作系统挂载运行程序的单元拥有一些独立的资源,如内存等线程进行运算调度的单元进程内的线程共享进程内的资源Nodejs 的事件循环主线程运行 v8 与 JavaScript多个子线程通过事件循环被调度使用子进程或线程利用更多的 CPU 资源子进程【child_process】master.jsconst cp = require('child_process');const child_process = cp.fork(__d原创 2021-12-26 20:43:32 · 705 阅读 · 0 评论 -
内存管理优化
内存优化管理新生代容量小,垃圾回收更快老生代容量大,垃圾回收更慢减少内存使用,也是提高服务性能的手段如果有内存泄漏,会导致服务性能大大降低检测步骤在压测过程中,对内存进行快照在压测结束之后,再进行一次快照可以发现在压测过程中,内存使用是 6.7 MB;压测结束之后,内存使用是 6.6 MB;Comparison 可以比较两个快照之间差异的情况每个内存值的持有者伪造内存泄露情况创建一个很大的数组,不会被释放在压测过程中进行快照,压力测试结束之后再原创 2021-12-26 19:58:49 · 224 阅读 · 0 评论 -
Javascript 代码性能优化
根据 devtools 中的 profile 进行性能分析1.可以看到在 index.js 中调用了 readFileSync每次请求,都会同步读取那个文件,所以将读取操作放到外边2可以看出是由于utf-8惹的祸,可以把 buffer 转化成 utf-8,去掉之后,直接就是 buffer尽量把在中间件中的计算移到程序启动的时候执行总结减少不必要的计算空间换时间将计算结果缓存起来...原创 2021-12-26 18:43:17 · 322 阅读 · 0 评论 -
如何在windows上安装 apache ab
下载 apache abhttps://www.apachehaus.com/cgi-bin/download.plx安装将压缩包解压到E盘打开配置文件 httpd.conf修改服务的根目录在E盘下创建www目录,修改以下两处以管理员身份启动 cmd查看 443 端口是否有占用netstat -ano | findstr "443"443 端口被 6712 的进程占用,杀掉这个进程,taskkill /pid 1292 -f在 cmd 中输入 httpd -k ins原创 2021-12-26 15:04:14 · 327 阅读 · 0 评论 -
Serverless
云函数不用再因为运维、架构的事情操心缩短业务上线周期减少出错的概率业务开发的上手难度更低渐进式Serverless => 屏蔽服务器细节Vue/React => domless屏蔽 DOM 操作细节缩短功能上线周期减少出错可能性开发前端业务的上手难度更低jQuery => compatless屏蔽浏览器兼容细节缩短功能上线周期减少出错可能性开发前端业务的上手难度更低Node.js => threadlessJa.原创 2021-12-26 13:40:40 · 260 阅读 · 0 评论 -
设计模式简介
观察者模式EventEmitterDOM addEventListener解决对象和对象之间通信的问题外观模式jQuery解决兼容性问题的时候,封装内部 if…else,对外提供一个简单的调用函数设计模式六大法则单一职责原则里氏替换原则依赖倒置原则接口隔离最小知晓原则开闭原则对扩展开放,对修改关闭...原创 2021-12-26 13:25:34 · 121 阅读 · 0 评论 -
koa 项目中的知识点 - 列表页
前后端同构后端需要渲染列表首屏加速SEO前端也需要渲染列表无刷新过滤、排序前后端同构同一个模板/组件,可在浏览器渲染。也可在Node.js渲染同构的关键:注重职责的分离用 react 进行服务端渲染Next.jsbackend 后端代码服务端渲染和浏览器端渲染...原创 2021-12-25 23:18:47 · 189 阅读 · 0 评论 -
koa 项目中的知识点 - 播放页
大纲代码目录结构mock-database.jsmodule.exports = { 1: { id: 1, avatar: 'https://static001.geekbang.org/account/avatar/00/0f/52/62/1b3ebed5.jpg', name: '僵尸浩', isTop: true, content: '哈哈哈哈', publishDate: '今天',原创 2021-12-25 17:19:02 · 174 阅读 · 0 评论 -
API 服务
API 服务RESTful简单易懂可以快速搭建在数据的聚合方面有很大优势根据method的不同分发到不同的路由GraphQL专注数据聚合,前端要什么就返回什么例 1:query.jsvar { graphql, buildSchema } = require('graphql');// Construct a schema, using GraphQL schema languagevar schema = buildSchema(` type Query { he原创 2021-12-25 16:09:40 · 460 阅读 · 0 评论 -
koa 项目中的知识点 - 详情页
过程描述使用 RPC 通信从后台服务器获取数据模板渲染include 子模版xss 过滤、模板 helper 函数将 ES6 模板字符串改造成模板引擎基础使用const vm = require('vm');const user = { name: 'haha'}console.log(vm.runInNewContext(`<h2>${user.name}</h2>`, { user })); // <h2>haha</原创 2021-12-25 14:54:42 · 687 阅读 · 0 评论 -
koa 项目中的知识点 - 下载页
下载页页面目录代码【index.js】const koa = require('koa');const fs = require('fs');const mount = require('koa-mount');const static = require('koa-static');const app = new koa();// 开放静态目录app.use( static(__dirname + '/source/'));app.use( m原创 2021-12-24 22:30:52 · 69 阅读 · 0 评论 -
RPC 调用
Buffer转化方法:Buffer.fromconst buffer1 = Buffer.from('geekbang'); // <Buffer 67 65 65 6b 62 61 6e 67>const buffer2 = Buffer.from([1, 2, 3, 4]); // <Buffer 01 02 03 04>Buffer.alloc(num)分配 num 字节大小的 bufferconst buffer3 = Buffer.alloc(20)原创 2021-12-24 21:43:54 · 316 阅读 · 0 评论 -
调试 Nodejs 代码
安装NIM[可以不安装]NIM 插件地址点击插件【有可能会比较慢,多等一会儿】修改为项目端口号【例如 3000】打开 Chrome 调试界面在终端执行node --inspect-brk index.js–inspect 不会终断–inspect-brk 在用户代码启动之前会终断,也就是代码在第一行就会暂停执行如果没有安装 NIM在Chrome浏览器中输入 chrome://inspect/点击 Open dedicated DevTools for Node 或原创 2021-12-20 22:02:57 · 206 阅读 · 0 评论 -
Nodejs 项目发布和部署(阿里云)
购买域名和服务器域名域名注册和购买购买好之后在这个地址查看服务器云服务器ESC境内需要备案,境外不需要备案镜像选择Ubuntu购买好之后在这里查看云服务器 ECS 实例点击 管理 可以更改密码连接到服务器点击远程连接可以使用 Windows Power Shell 进行连接@后面的填入服务器的公网IP域名解析点击添加记录主机记录中填入三级域名【随便起一个】记录值中填入服务器公网IP地址在bash中执行ssh [email protected]原创 2021-12-19 16:26:54 · 3432 阅读 · 0 评论 -
再次阅读《深入浅出 Node.js》有感
第一章:Node简介设计高性能 Web 服务器的几个要点:事件驱动、非阻塞 I/OChrome浏览器和Node的组件构成浏览器通过事件驱动来服务界面上的交互,Node通过事件驱动来服务I/ONode不处理UI,但用与浏览器相同的机制和原理运行在Node中,绝大多数的操作都以异步的方式进行调用,底层构建了很多异步I/O的API,从文件读取到网络请求等,每个调用之间无须等待之前的I/O调用结束Node保持了JavaScript在浏览器中单线程的特点。而且在Node中,JavaScript与其余线原创 2021-12-02 20:10:07 · 342 阅读 · 0 评论 -
教你使用socket.io写一个简单聊天室
功能简介输入名字进行登录发送消息登录另一个用户发送消息观察张曼玉用户,可以发现消息也可以显示在上面代码实现思维导图server.jsconst express = require('express');const app = express();const server = require('http').createServer(app);const io = require('socket.io').listen(server).sockets;ap原创 2021-11-04 14:23:53 · 161 阅读 · 0 评论 -
基于Node的DNS系统
准备工作新建文件夹在文件夹下创建app.js和DNS.jsnpm install --save express设置DNS地址打开Windows设置点击更改适配器选项点击属性选中internet 协议版本4 后点击属性按照下面的样子修改app.js代码:var express = require('express');var app = express();app.set('port', process.env.PORT || 3000);app.get('原创 2021-05-13 23:29:02 · 359 阅读 · 0 评论 -
构建UDP服务
UDP不是面向连接的,一个套接字可以与多个UDP服务通信虽然提供面向事务的简单不可靠信息传输服务,在网络差的情况下存在丢包严重的问题,但是由于它无须连接,资源消耗低,处理快速且灵活,所以常常应用在那种偶尔丢一两个数据包也不会产生重大影响的场景,比如音频、视频等DNS服务就是基于它实现的创建UDP套接字UDP套接字一旦创建,既可以作为客户端发送数据,也可以作为服务器端接受数据var dgram = require('dgram');var socket = dgram.createSocket.原创 2021-05-13 15:07:52 · 418 阅读 · 4 评论 -
【MongoDB】update修改器($set、$unset、$inc、$push、$pull、$pop)
1. $set局部修改,不存在则新增该字段db.stu.update({hometown:"蒙古"},{$set:{age:18,height:170}})update()命令默认只更新查找到({hometown:“蒙古”})数据中的第一条数据,如果想批量修改,可以增加{multi:true}2. $unset删除字段,指定key,值是多少都不影响。好像并非真的删除,只是把它置为nulldb.stu.update({hometown:"蒙古"},{$unset:{height:170}}原创 2021-04-07 12:15:38 · 1013 阅读 · 0 评论 -
RESTful API设计指南
一、协议API与用户的通信协议,总是使用HTTPs协议。二、域名应该尽量将API部署在专用域名之下。https://api.example.com如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。https://example.org/api/三、版本应该将API的版本号放入URL。https://api.example.com/v1/另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。四、路径路径又称"终点"(en转载 2021-04-06 21:30:24 · 72 阅读 · 0 评论 -
node.js中的中间件
通过 app.use 加载中间件,在中间件中通过 next 将请求传递到下一个中间件,next 可接受一个参数接收错误信息,如果使用了 next(error),则会返回错误而不会传递到下一个中间件,修改 index.js 如下:index.jsconst express = require('express')const app = express()app.use(function (req, res, next) { console.log('1') next(new Error('h原创 2021-04-05 09:01:42 · 163 阅读 · 0 评论 -
require的使用
require 用来加载一个文件的代码,关于 require 的机制这里不展开讲解,请仔细阅读 官方文档。简单概括以下几点:require 可加载 .js、.json 和 .node 后缀的文件require 的过程是同步的,所以这样是错误的:setTimeout(() => { module.exports = { a: 'hello' }}, 0)require 这个文件得到的是空对象 {}require 目录的机制是:如果目录下有 package.json 并指定了原创 2021-04-04 18:15:40 · 1752 阅读 · 0 评论 -
app.configure in express
下面这两种写法有什么不同呢?var app = require(express);app.configure(function(){ app.set('port', process.env.PORT || config.port); app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */ app.use(express.bodyParser()); app.use(express..原创 2021-03-16 08:29:48 · 115 阅读 · 0 评论 -
nodemon : 无法将“nodemon”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路 径,请确保路径正确,然后再试一次。
第一种:配置环境变量网上有很多教程教程第二种:设置script之后如果启动的时候就直接npm start就可以了原创 2021-03-15 08:22:59 · 303 阅读 · 0 评论