01

nodejs模块之 redis作业/任务队列模块 bee-queue

nodejs模块,redis作业/任务队列模块,bee-queue

Git URL:

Git Clone代码到本地:

Subversion代码到本地:

一个简单、快速、健壮的Node.js 作业/任务(job/task) 队列。由Redis支持。

  • 简单:~1000 LOC,最小依赖性。
  • 快速:通过最小化Redis和网络开销来最大化吞吐量。 基准测试。
  • 健壮:考虑并发性。原子性和失败的设计;接近完整的代码覆盖。

简介 Continue reading

22

Nodejs模块之ioredis模块的简单使用

Node模块Nodejs模块之ioredis模块的简单使用

ioredis 是Nodejs的一个Redis模块,有着与Redis一模一样的 API 操作。

redis是单线程作业,所以不管查询任务是由一个链接发来的还是多个链接发来的,redis是串行的执行。并通过当前的链接返回客户端。nodejs接受redis的返回后,不管是不是并行,都要等主线程空闲下来才能一个个处理服务器返回的数据。

io

它有几个特点:

  • 全功能。它支持 Cluster,Sentinel,Pipelining 以及 Lua 脚本和 Pub / Sub(在二进制消息的支持下)。
  • 高性能。
  • 令人愉快的 API 它适用于 Node 回调和 Promise。
  • 转换命令参数和回复。
  • 透明键前缀。
  • 抽象 Lua 脚本,允许您定义自定义命令。
  • 支持二进制数据。
  • 支持 TLS。
  • 支持离线队列和准备检查。
  • 支持 ES6 类型,如 Map 和 Set。
  • 支持 GEO 命令(Redis 3.2 Unstable)。
  • 复杂的错误处理策略。

Continue reading

13

nodejs中的单进程异步锁——async-lock

nodejs中的单进程异步锁,node异步锁,async-lock

为什么是async-lock?

因为我见其下载量比较大(在我发现的所有类似库中是最大的)且最近更新时间较近。

场景

  1. 在异步函数中,由于存在异步操作,对此函数的A,B两次执行会出现结束次序不可控。即A先执行,却比B后退出函数。
  2. 对于数据库的操作,有时会将select的值进行一系列业务变化后重新update至数据库。就比如简单的计数器,0开始计数,假设由于业务原因,
    必须在代码中进行+1操作。则A读取数据库进入异步执行,此时B也开始执行读取数据库的代码,最终后造成两次执行后计数器只加了1。

此时便需要锁机制,类似于Java中的synchronized或者lock。执行同一段代码时,添加相同的key,则发现此key正在使用,则直接放入此key的待执行数组。 Continue reading

12

Node 进程互斥锁模块 – lockman

Node进程互斥锁,lockman,进程锁

这是我在网上找到的一个node模块,用在thinkjs开发框架中的多进程项目中的工作进程中,失败。表现是,在locker.acquire的回调函数中使用console.log(‘…’),有时不打印,有时会打印几百上千条,没搞明白,也许是与作者的开发环境有差异?也许是年代久远(2017-01-07最后一次更新)?

不知不知……

介绍

lockman 是一个用于多进程的「互斥锁」, 类似一些语言中(比如 C#)的 lock 关键字可以用来确保代码块完成运行,而不会被其他进程「影响」。
它可以把一段代码定义为「互斥段」(critical section),「互斥段」在一个时刻内只允许一个进程进入执行,
而其他进程必须等待。

不同之处,C# 的 lock 关键字作用在「线程间」,lockman 作用在 Node 的进程间。

安装

示例 Continue reading

26

Error: socket hang up 报错分析与解决办法

nodejs做的韩国演唱会抢票软件项目报错如下:

{ err: { code: ‘ECONNRESET’ } } Continue reading

10

nodejs相关框架

nodejs框架,nodejs相关框架

node

官网 GitHub

一个基于 Chrome V8 引擎的 JavaScript 运行环境

Express

官网 GitHub

基于 Node.js 平台,快速、开放、极简的 web 开发框架。

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求。
  • 定义了路由表用于执行不同的 HTTP 请求动作。
  • 可以通过向模板传递参数来动态渲染 HTML 页面。

Continue reading

26

nodejs多进程架构设计

一、玩转进程

node的单线程只不过是js层面的单线程,是基于V8引擎的单线程,因为,V8的缘故,前后端的js执行模型基本上是类似的,但是node的内核机制依然是通过libuv调用epoll或者IOCP的多线程机制。换句话说,node从严格意义上讲,并非是真正的单线程架构,node内核自身有一定的IO线程和IO线程池,通过libuv的调度,直接使用了操作系统层面的多线程。node的开发者,可以通过扩展c/c++模块来直接操纵多线程来提高效率。不过,单线程带来的好处是程序状态单一,没有锁、线程同步、线程上下文切换等问题。但是单线程的程序,并非是完美的。现在的服务器很多都是多cpu,多cpu核心的,一个node实例只能利用一个cpu核心,那么其他的cpu核心不就浪费了吗?并且,单线程的容错也很弱,一旦抛出了没有捕获的异常,必将引起整个程序的崩溃,那这样的程序必然是非常脆弱的,这样的服务器端语言又有什么价值呢? Continue reading

20

NodeJS项目使用AVA模块做自动化测试

目录

1、为什么选择 AVA ?
2、API 概览。
3、准备工作。
4、单元测试,测试一个简单的工具函数。
5、使用 Promise、Async/await、Observable 。
6、使用 JSDOM 模拟浏览器环境。
7、单元测试,测试一个简单的 React 组件。
8、Http 接口测试,GitHub 用户信息接口测试。
9、串行测试。
10、快照断言。
11、覆盖率报告:nyc + Coveralls 。
12、持续集成:CircleCI 。
13、学习借鉴,一些使用 AVA 做测试的开源项目。
14、e2e测试框架推荐:TestCafe 。
15、参考。 Continue reading

20

nodejs中的TCP(net模块)的简单应用

TCP(Transimision Control Protocal)是一种可靠的、面向连接的协议,传输效率低。

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

上面是基本网络模型的组成,再来看一下tcp/ip的参考模型

TCP/IP是传输控制协议/网络互联协议的简称。早期的TCP/IP模型是一个四层结构,从下往上依次是网络接口层、互联网层、传输层和应用层。后来在使用过程中,借鉴OSI七层参考模型,将网络接口层划分为了物理层和数据链路层,形成五层结构。

我们看到了tcp/ip网络模型把osi中的应用层、表示层、会话层合并成了应用层。
Tcp协议实际上是在传输层。传输层是面向连接的、可靠的的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传播。TCP将若干个字节构成一个分组,此分组称为报文段(Segment)。提供了一种端到端的连接。 传输层的协议主要是TCP 。 Continue reading

16

npm 和 cnpm

npm
  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用
npm命令
  • npm -v 来测试是否成功安装
  • 查看当前目录已安装插件:npm list
  • 更新全部插件: npm update [ --save-dev ]
  • 使用 npm 更新对应插件: npm update <name> [ -g ] [ --save-dev]
  • 使用 npm 卸载插件: npm uninstall <name> [ -g ] [ --save-dev ] Continue reading