[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 */

相關文章
相關標籤/搜索