首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Node.js - 200 多行代码实现 Websocket 协议

到网上搜罗了一番资料后用 Node.js 实现该协议,倒也没有想象中那么复杂,除去注释语句和 console 语句后,大约 200 行代码左右。本文记录了实现过程中的经验和总结。...2、知识储备 如果要自己写一个 Websocket 服务,主要有两个难点: 熟练掌握 Websocket 的协议,这个需要多读现有的解读类文章;(下面会给出参考文章) 操作二进制数据流,在 Node.js...Bit),不太清楚的,可以参考 LSB最低有效位和MSB最高有效位 具体的做法如下,推荐先阅读以下几篇参考文章: 学习WebSocket协议—从顶层到底层的实现原理(修订版):作者本身自己就用 Node.js...B、 实战 实现代码放在自己的 demos 仓库的 micro-ws 的目录 了,git clone 后本地运行,执行 node index.js 将会在 http://127.0.0.1:3000...5、总结 从刚开始决定阅读 Websocket 协议,到自己使用 Node.js 实现一套简单的 Websocket 协议,到这篇文章的产出,前后耗费大约 1 个月时间(拖延症。。。)。

2.5K31
您找到你想要的搜索结果了吗?
是的
没有找到

2万多行MyBatis源码中有多少设计模式吗|文末赠书

在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。 经过整理,大概有以下设计模式,如图1所示。...可以说,复杂且优秀的ORM 框架源码在设计和实现的过程中都会使用大量的设计模式。...学习源码远不是只是为了应付面试,更重要的是学习优秀框架在复杂场景下的解决方案。通过学习这些优秀的方案技术,可以提高对技术设计和实现的理解,扩展编码思维,积累落地经验。...本文节选自《手写MyBatis:渐进式源码实践》一书,欢迎阅读本书了解更多相关内容!...抽奖赠书 本次福利将送出《手写MyBatis:渐进式源码实践》* 5本 为避免撸羊毛的用户参与抽奖,让更多真实用户获得社区福利,现在把抽奖方式切换到 spring4all.com 网上通过积分参与。

39320

手写Express.js源码

手写源码 手写源码才是本文的重点,前面的不过是铺垫,本文手写的目标就是自己写一个express来替换前面用到的express api,其实就是源码解析。...本文所有手写代码全部参照官方源码写成,方法名和变量名尽量与官方保持一致,大家可以对照着看,写到具体的方法时我也会贴出官方源码的地址。...express.js对应的源码看这里:github.com/expressjs/e… app.listen 上面说了,express.js只是一个空壳,真正的app在application.js里面,所以..._router = new Router(); } } 复制代码 app.listen,app.handle和methods处理方法都在application.js里面,application.js...[method] 所以我们来看下Router这个类,下面的代码是从源码中简化出来的: // router/index.js var setPrototypeOf = require('setprototypeof

5.4K30

手写Koa.js源码

第二篇文章是看了Express的基本用法,更主要的是看了下他的源码:手写Express.js源码 Express的源码还是比较复杂的,自带了路由处理和静态资源支持等等功能,功能比较全面。...从上面两个例子的代码来看,Koa跟Express有几个明显的区别: ctx替代了req和res 可以使用JS的新API了,比如async和await 手写源码 手写源码前我们看看用到了哪些API,这些就是我们手写的目标...lib/application.js这个文件就是我们经常用的Koa类,虽然我们经常叫他Koa类,但是在源码里面这个类叫做Application。...app.createContext对应的官方源码看这里:github.com/koajs/koa/b… context.js 上面的this.context其实就是来自context.js,所以我们先在...Express源码可以看我之前这篇文章:手写Express.js源码 Koa的思路看起来更清晰,Koa本身的库只是一个内核,只有中间件功能,来的请求会依次经过每一个中间件,然后再出来返回给请求者,这就是大家经常听说的

1.1K20

研究MapReduce源码之实现自定义LineRecordReader完成多行读取文件内容

TextInputFormat是Hadoop默认的数据输入格式,但是它只能一行一行的读记录,如果要读取多行怎么办?...你看源码的182-197行,如下(我的基于2.6.4版本的源码,不同的版本代码应该差别不大) while (getFilePosition() <= end || in.needAdditionalRecordAfterSplit...如果我们自定义读取多行的时候,肯定不能清空它,因为我们需要它来计数第二行的位置 比如 123, 456 789, 111 如果一次读两行的话 假如我把第一行清空了,那么我第二行的偏移量就得不到正确的值了...MyRecordReader(context.getConfiguration()); } } 接着写一个自定义的LineRecordReader 其中修改了182行开始的以下代码 因为我这里要实现输出多行...看第2列的偏移量,发现已经实现了一次读多行(我测试的是2行) 到此所有分析已经完了,研究源码真不容易,花了我一个晚上去研究hadoop的源码,然后再花了几个小时把这些内容写成博客,所以,码字不易,转载请指明出处

1.5K100

如何阅读JS源码?读源码有什么好处

对,就是看别人写的JS代码。文档嘛,自然是没有的。 之前也有试过看代码,但项目中N多JS文件,每个JS文件上千行,一行一行的看下来,用不了几分钟就完全晕掉了。...于是,这一次,我决定换一个方式读JS源码。 这个项目中有N个JS文件,我把入口的JS文件拿出来先看,然后我把它里面所有的函数名,都用思维导图写出来,就像这样, ?...看小说一行行看就OK,但读源码的重点,不在于要读完并理解每一行JS代码,而在于通过图表和笔记,理解系统的结构和它们之间的关系。...实际上这也是不可能的,每个大项目中上百个JS文件,每个JS文件上千行、几千行代码,这算起来就十万多行了,哪有时间让你慢慢看完。...推广来说,看项目源码,看前端各种构架的源码,它最大的好处就是可以培养自己的对于代码的“层次感”。

3.6K110

Vue.js 源码⽬录设计

Vue.js源码都在 src 目录下,其目录结构如下: src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms...Vue.js 四、server Vue.js 2.0 支持了服务端渲染,所有服务端渲染相关的逻辑都在这个目录下 ?...注意:这部分代码是跑在服务端的 Node.js,不要和跑在浏览器端的 Vue.js 混为一谈 服务端渲染主要的工作是把组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将静态标记"混合...这个目录下的代码逻辑会把 .vue 文件内容解析成一个 JavaScript 的对象 六、shared Vue.js 会定义一些工具方法,这里定义的工具方法都是会被浏览器端的 Vue.js 和服务端的...Vue.js 所共享的 ?

1.3K30

JS魔法堂:mmDeferred源码剖析

一、前言                               avalon.js的影响力愈发强劲,而作为子模块之一的mmDeferred必然成为异步调用模式学习之旅的又一站呢!...三、源码剖析                                 首先要了解的是mmDeferred中存在Deferred和Promise两个操作集合(两者操作同一个的数据结构实例),Promise...利用JS中变量声明自动提升(hoist)的特性,通过前置return语句将对外接口与具体实现的代码分离。   2....下面是源码 define("mmDeferred", ["avalon"], function(avalon) { var noop = function() { } function...} Deferred.nextTick = avalon.nextTick return Deferred }) 四、总结                               源码中还提供了相关资料的链接

1K60

迷你 JS 框架 Hyperapp 源码解析

Hyperapp 是最近热度颇高的一款迷你 JS 框架,其源码不到 400 行,压缩 gzip 后只有 1kB,却具有相当高的完成度,拿来实现简单的 web 应用也不在话下。...源码解析 回到源码上来,由于 Hyperapp 所有的操作都在 app 函数中完成,下面就来探究一下 app 函数都做了什么。...该函数主流程相当简单,源码总计十来行,先贴在下面,后面慢慢分析: export function app(state, actions, view, container) { var map = [...我们看一下源码: function scheduleRender() { if (!...在研究其源码前,我们先看一下 Hyperapp 对 actions 中的方法制定的规范,当 state 中无嵌套对象时,总结起来大致是以下几条: 必须是一元函数(只接受一个参数) 函数返回值必须是以下几种

2K30

JS魔法堂:jsDeferred源码剖析

并且当你看过官网(http://cho45.stfuawsc.com/jsdeferred/)的新手引导后就会有种不好好学学就太可惜的感觉了,而只看API和使用指南是无法满足我对它的好奇心的,通过解读源码读透它的设计思想才是根本...本文部分内容将和《JS魔法堂:剖析源码理解Promises/A》中的内容作对比来讲解。  ..._next; }; 《JS魔法堂:剖析源码理解Promises/A》中的官网实现示例是将事件处理函数绑定到当前的Promise实例,而不是新创的Promise实例。...1000); d.canceller = function () { clearTimeout(id) }; return d; };     刚看到该函数时我确实有点小鸡冻,我们可以将《JS...魔法堂:剖析源码理解Promises/A》的第三节“从感性领悟”下的示例,写得于现实生活的思路更贴近了。

2.2K70
领券