故事背景


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

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

基础概念


一、短轮询、长轮询(comet)、长连接(SSE)、WebSocket

  • 基本概念

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

① 短轮询 - 服务器立即响应

② comet 长轮询 - 服务器觉得有必要时(比如发生了变化)才响应

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

④ 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/');

超级简单的服务器

二、单线程模型架构

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

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

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

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

三、Buffer 类

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

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

一种功能更为全面的Array。

四、文件系统操作

Ref: Node.js v10.5.0 Documentation

var fs = require("fs"); 

文件读写 默认是异步。

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

const os = require('os');

系统本身的API对接。

五、事件触发

  • 基本概念

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 的子类。

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

六、模块知识

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

var util = require('util'); 

Node 服务器


一、写个服务器

可见,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/');

二、服务器性能

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

[Full-stack] 异步即时通信 - Async的更多相关文章

  1. (转)基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案

    一.前言.提出问题 公司最近举行2011年度创新设计大赛,快年底了正打算写写2010年以来Android开发的心得与经验,正好同事出了个点子:假如A和B两个人分别在不同的地点,能不能实现这样的功能,让 ...

  2. .NET 即时通信,WebSocket服务端实例

    即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...

  3. .NET实现WebSocket服务端即时通信实例

    即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...

  4. .NET 即时通信,WebSocket

    .NET 即时通信,WebSocket 即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s ...

  5. C# 异步编程(async&await)

    同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去 异步:异步是指进程不需要一直等下去,而是继续执行下面的操作 ...

  6. 即时通信WebSocket 和Socket.IO

    WebSocket HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯. 在2008年诞生,2011年成为国际标准. 现在基本所有浏览器都已经支持了. We ...

  7. 即时通信之 SignalR

    即时通信在日常的web开发场景中经常使用,本篇主要回顾一下SignalR的实现原理和通过例子说明如何在.NET Core 中使用. SingnalR 应用 需要从服务器进行高频更新的应用程序.例如游戏 ...

  8. 开发一个分布式IM(即时通信)系统!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 这知识学的,根本没有忘的快呀?! 是不是感觉很多资料,点收藏起来爽.看视频时候嗨.读 ...

  9. C# 同步 异步 回调 状态机 async await Demo

    源码 https://gitee.com/s0611163/AsyncAwaitDemo 为什么会研究这个? 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者 ...

随机推荐

  1. ftp命令详解补充

     下面我来详细地介绍一个登陆FTP的命令和步骤吧: FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令.熟悉并灵活应用F ...

  2. python测试开发django-44.xadmin自定义菜单项

    前言 xadmin后台的菜单项是放到一个app下的,并且里面的排序是按字母a-z排序,有时候我们需要划分多个项,需要自定义菜单列表,可以通过重写CommAdminView类实现. xadmin后台提供 ...

  3. caffe实际运行中遇到的问题

    https://blog.csdn.net/u010417185/article/details/52649178 1.均值计算是否需要统一图像的尺寸? 在图像计算均值时,应该先统一图像的尺寸,否则会 ...

  4. 【GPU编解码】GPU硬编码 (转)

    一.OpenCV中的硬编码 OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下. 1 int main(int arg ...

  5. wcstombs_s 宽字节转多字节

    // crt_wcstombs_s.c // This example converts a wide character // string to a multibyte character str ...

  6. [Java] HashMap 源码简要分析

    特性 * 允许null作为key/value. * 不保证按照插入的顺序输出.使用hash构造的映射一般来讲是无序的. * 非线程安全. * 内部原理与Hashtable类似.   源码简要分析 pu ...

  7. http头文件User-Agent详解【转载】

    原文地址:http://blog.csdn.net/andybbc/article/details/50587359 http头文件User-Agent详解 什么是User-Agent User-Ag ...

  8. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  9. [Aaronyang] 写给自己的WPF4.5 笔记17[Page实现页面导航]

    1. 第一个Page页使用 新建PageDemo解决方案,默认wpf应用程序 右键项目新建页,然后指定App.xaml的默认启动窗口,为Page1.xaml,F5运行项目 文章内容已经迁移http:/ ...

  10. C#字符串转换为float

    1.解决不同计算机上,区域和时间不同而引起的转换问题(如:“123.456”报“字符串格式不正确”问题) //解决区域.语言变更引起的“识别不出小数点问题”如:转换时“123.456”转换时不认识&q ...