[Full-stack] 异步即时通信 - Async
故事背景
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的更多相关文章
- (转)基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案
一.前言.提出问题 公司最近举行2011年度创新设计大赛,快年底了正打算写写2010年以来Android开发的心得与经验,正好同事出了个点子:假如A和B两个人分别在不同的地点,能不能实现这样的功能,让 ...
- .NET 即时通信,WebSocket服务端实例
即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...
- .NET实现WebSocket服务端即时通信实例
即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...
- .NET 即时通信,WebSocket
.NET 即时通信,WebSocket 即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s ...
- C# 异步编程(async&await)
同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去 异步:异步是指进程不需要一直等下去,而是继续执行下面的操作 ...
- 即时通信WebSocket 和Socket.IO
WebSocket HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯. 在2008年诞生,2011年成为国际标准. 现在基本所有浏览器都已经支持了. We ...
- 即时通信之 SignalR
即时通信在日常的web开发场景中经常使用,本篇主要回顾一下SignalR的实现原理和通过例子说明如何在.NET Core 中使用. SingnalR 应用 需要从服务器进行高频更新的应用程序.例如游戏 ...
- 开发一个分布式IM(即时通信)系统!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 这知识学的,根本没有忘的快呀?! 是不是感觉很多资料,点收藏起来爽.看视频时候嗨.读 ...
- C# 同步 异步 回调 状态机 async await Demo
源码 https://gitee.com/s0611163/AsyncAwaitDemo 为什么会研究这个? 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者 ...
随机推荐
- Centos 7 安装 Mysql 5.5 5.6 5.7
环境 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node1 ~]# uname -a Linu ...
- C#高级编程9 第17章 使用VS2013-C#特性
C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...
- C语言事实上不简单:sizeof
问:C语言中一共同拥有多少个keyword? 答:32个. 答不上来的没关系.非常正常.我们玩的是程序的艺术.而不是背数字. 只是这个特殊的数字1<<5也是非常好记的-.-. 问:size ...
- MongoDB的学习--索引类型和属性(转)
原文链接:MongoDB的学习--索引类型和属性 索引类型 MongDB的索引分为以下几种类型:单键索引.复合索引.多键索引.地理空间索引.全文本索引和哈希索引 单键索引(Single Field I ...
- [Android] 关于Android的问号?和@符号的用法
@表示引用资源,声明这是一个资源引用-随后的文本是以@[package:]type/name形式提供的资源名.@android:string表明引用的系统的(android.*)资源@string表示 ...
- hadoop权威指南学习(一) - 天气预报MapReduce程序的开发和部署
看过Tom White写的Hadoop权威指南(大象书)的朋友一定得从第一个天气预报的Map Reduce程序所吸引, 殊不知,Tom White大牛虽然在书中写了程序和讲解了原理,但是他以为你们都会 ...
- PRTG参考价格
2010年的香港的网站上看到如下价格:http://kb.option-hk.com/?tag=prtg-network-monitor 什么才算一个sensor What counts as a s ...
- 11G新特性 -- 分区表和增量统计信息
对于分区表,优化器会在全局级别为整个表维护一份统计信息,也会在分区级别为分区表维护一份统计信息. 对于大多数分区,dml一般都是在最近的分区上执行.在11g中,数据库支持只对那些发生一定数据变化的分区 ...
- awk的些许小技巧
一句话kill掉名为navimain进程的shell脚本(利用awk的列操作能力) `ps|grep navimain | awk 'NR==1 {print $1}'`
- 3.翻译系列:EF Code-First 示例(EF 6 Code-First系列)
原文链接:http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspx EF 6 Code-Firs ...