[Full-stack] 异步即时通讯 - Async

故事背景


socket.io, node.js, koa为首的一些通讯框架和后端技术点。html

以后有必要过一遍《NodeJS 设计模式》。node

 

 

  

基础概念


1、短轮询、长轮询(comet)、长链接(SSE)、WebSocket

  • 基本概念

Ref: [Node.js] 01 - How to learn node.jsshell

① 短轮询 - 服务器当即响应npm

② comet 长轮询 - 服务器以为有必要时(好比发生了变化)才响应编程

③ SSE - 支持了服务器端的推送json

④ WebSocket - 全双工,http的扩展 - Netty, nodejs就是基于此技术的例子后端

 

  • 最简单的http服务器

使用了“包”,也就是require(<包>),也就谈到了npm, package.json文件。设计模式

var http = require('http');

http.createServer( function (request, response) {

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead (200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end ('Hello World\n');
}).listen(8888);

// 终端打印以下信息
console.log('Server running at http://127.0.0.1:8888/');
超级简单的服务器

 

 

2、单线程模型架构

与Unix环境系统编程的API很像。api

Ref: [Node.js] 02 - Read Eval Print Loop数组

var exec = require('child_process').exec;
var shell = require("shelljs");

/**
* 参数处理模块,变化多端
*/
var argv = require('yargs').argv;

 

 

3、Buffer 类

Ref: [Node.js] 03 - Buffer, Stream and File IO

一个 Buffer 相似于一个整数数组,但它对应于 V8 堆内存以外的一块原始内存。

一种功能更为全面的Array。

 

 

4、文件系统操做

Ref: Node.js v10.5.0 Documentation

var fs = require("fs"); 

文件读写 默认是异步。

文件流 与事件触发相结合。

const os = require('os');

系统自己的API对接。

 

 

5、事件触发

  • 基本概念

Ref: [Node.js] 04 - Event and Callback

Node.js 的每个 API 都是异步的

Node.js 基本上全部的事件机制都是用设计模式中观察者模式实现。 

var events       = require('events');
var eventEmitter = new events.EventEmitter();

eventEmitter.on() # 绑定事件
eventEmitter.emit() # 触发事件

参见连接中的:一个综合性的例子

 

  • 事件触发的继承

大多数时候咱们不会直接使用 EventEmitter,而是在对象中继承它。

包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。

举例:老师喊一嗓子,触发每一个学生对象喊一句“到”。

 

 

6、模块知识

具体参见:[Node.js] 05 - Modules and Function

var util = require('util'); 

 

 

 

Node 服务器


1、写个服务器

可见,node方式写server之简洁明了。

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

 

 

 

2、服务器性能

Ref: [Node.js] 06 - Multi-thread and process module

  • 服务器扩展性
    • X轴方向:服务实例拓展
    • y轴方向:功能性的拓展
    • z轴方向:按照业务数据对服务进行拓展(更多的服务分别处理不一样的业务)

 

  • Microservices

微服务的容错性 ----> Unity的自治思想

 

  • 对比 Netty

    • 线程数:100;循环次数:100;

    • 线程数:1000;循环次数:10;

    • 线程数:1000;循环次数:100;

 

 

 

Multi-thread/process 实践


Ref: [Node.js] 06 - Multi-thread and process module

JS自己的异步方法,以及node封装的系统接口。

 

/* implement */

 

 

 

 

Server 框架


 

Express 与 Koa 实践,包括涉及到的负载平衡以及相关方案。

如何作massive requests的压力测试?

/* implement */

相关文章
相关标签/搜索