engine.io

实现跨浏览器、跨设备双向通信层

通信:Emitter

class Emitter {_subs: {};construtor (params?: object) {return(params && this.mixin(params));}mixin (params) {for (let key in Emitter.prototype) {params[key] = Emitter.prototype[key];}return params;     }on (event, fn) {(this._subs[event] = this._subs[event] || []).push(fn);return this;}once (event, fn) {function on () {this.off(event, fn);fn.apply(this, arguments);}on.fn = fn;this.on(event, on);return this;}off (event, fn) {if (0 === arguments.length) {this._subs = {};return this;}let callbacks = this._subs[event];if (!callbacks || !callbacks.length === 0) return this;if (1 === arguments.length) {delete this._subs[event];return this;}let cb;for (let i = 0; i < callbacks.length; i++) {cb = callbacks[i];if (cb === fn || cb.fn === fn) {callbacks.splice(i, 1);break;}}return this;}emit (event, ...args?: any) {callbacks = this._subs[event];callbacks.forEach((item)=>{item.apply(this.args);});return this;}}

transports

base class [Transport]

websocket

class WS extends Transport {name: string = 'websocket';supportsBinary: boolean = true;constructor (params) {super(params);}doOpen () {const uri = this.uri();const protocols = this.protocols;let opts = {agent: this.agent}// SSL options for Node.js clientopts.pfx = this.pfx;opts.key = this.key;opts.passphrase = this.passphrase;opts.cert = this.cert;opts.ca = this.ca;opts.ciphers = this.ciphers;opts.rejectUnauthorized = this.rejectUnauthorized;if (this.extraHeaders) {opts.headers = this.extraHeaders;}if (this.localAddress) {opts.localAddress = this.localAddress;}try {this.ws = this.usingBrowserWebSocket ? (protocols ? new WebSocket(uri, protocols) : new WebSocket(uri)) : new WebSocket(uri, protocols, opts);} catch (err) {return this.emit('error', err);}this.addEventListeners();}doClose () {if (typeof this.ws !== 'undefined') {this.ws.close();}}write () {}addEventListener () {this.ws.onopen = () => {this.onOpen();}this.ws.onclose = () => {this.onClose();}this.ws.onmessage = (ev) => {this.onData(ev.data);}this.ws.onerror = () => {this.onError('websocket error', e);}}
}

socket.io 之 engine.io相关推荐

  1. io读取一个文件再写入socket技术_JAVA中IO与NIO面试题

    BIO.NIO有什么区别? BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低. NIO:New IO 同步非阻塞 IO,是传统 IO ...

  2. Socket.IO 客户端 API IO

    IO 创建方式 <script src="/socket.io/socket.io.js"></script> <script>const so ...

  3. IO模式和IO多路复用

    前言 前天看redis相关的博文里面提到了epoll,就搜了一下,发现这篇文章 Linux IO模式及 select.poll.epoll详解,讲的很好,收获很大.这里根据自己的理解总结一下. IO模 ...

  4. mysql io depth_MySQL读写IO的操作过程解析

    数据库作为存储系统,所有业务访问数据的操作都会转化为底层数据库系统的IO行为(缓存系统也可以当做是key-value的数据库),本文主要介绍访问MySQL数据库的IO流程以及IO相关的参数. 一.My ...

  5. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  6. 重叠IO模型-异步IO

    重叠IO模型-异步IO http://laiba.tianya.cn/laiba/CommMsgs?cmm=959&tid=2701316824681802728 说到重叠模型首先还是提一下异 ...

  7. python 异步io_python之同步IO和异步IO

    linux操作系统基础知识 用户空间和内核空间 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核保证内核的安全,操 ...

  8. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  9. Windows内核原理-同步IO与异步IO

    目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导 ...

最新文章

  1. python数据分析平均时间间隔_python 数据分析中常用的时间--datetime操作
  2. 年度总结——文字留住岁月,情感点缀年华
  3. MAT之GA:GA优化BP神经网络的初始权值、阈值,从而增强BP神经网络的鲁棒性
  4. Zookeeper的节点操作
  5. 服务器主板装w7系统死机,解决win7安装过程死机现象有一招
  6. tair client java_TFS(Taobao File System)Java Client 使用经验
  7. java == 如何避免空指针异常
  8. 论文浅尝 - 计算机工程 | 大规模企业级知识图谱实践综述
  9. DFF之--(一)神经网络入门之线性回归
  10. LSTM和GRU介绍
  11. vscode如何自定义补全内容,自定义常用的快捷方式?
  12. 使用Flash,HTML5和Unity开发网页游戏的对比
  13. Hazel引擎学习(二)
  14. 计算机文档排版软件,WORD排版大师
  15. XShell rz、sz命令
  16. 人工智能的局限性--王垠
  17. Gather-Excite:Exploiting Feature Context in Convolutional Neural Networks
  18. 深入理解JavaScript运行机制
  19. webpack打包、js处理兼容性、代码压缩问题Uncaught SyntaxError: Cannot use import statement outside a module (at index
  20. percentile_approx函数用法

热门文章

  1. 代理模式及Java实现动态代理
  2. 一台电脑上同启动两个Tomcat的方式,windows/Linux配置
  3. Java 性能优化之 String 篇
  4. Effective Java读书笔记六:方法
  5. 【LaTeX】E喵的LaTeX新手入门教程(6)中文
  6. 实现一个反向传播人工神经网络
  7. 【python图像处理】tiff文件的保存与解析
  8. 4.从单应矩阵中分离得到内参和外参(需要拍摄n=3张标定图片)
  9. Linux--轻松定义自己的RPM/DEB软件包
  10. 你应该知道的Excel 2007小技巧