Node.js 开发实战
杨浩
腾讯高级工程师
37442 人已学习
新⼈⾸单¥68
课程目录
已完结/共 57 讲
第一章:课程简介 (5讲)
Node.js 开发实战
登录|注册
留言
42
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 25 | RPC 调用:Node.js net建立多路复用的RPC通道
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | Node.js是什么?
04 | Node.js可以用来做什么?
05 | 课程实战项目介绍
06 | 什么是技术预研?
07 | Node.js开发环境安装
08 | 第一个Node.js程序:石头剪刀布游戏
09 | 模块:CommonJS规范
10 | 模块:使用模块规范改造石头剪刀布游戏
11 | 模块:npm
12 | 模块:Node.js内置模块
13 | 异步:非阻塞I/O
14 | 异步:异步编程之callback
15 | 异步:事件循环
16 | 异步:异步编程之Promise
17 | 异步:异步编程之async/await
18 | HTTP:什么是HTTP服务器?
19 | HTTP:简单实现一个HTTP服务器
20 | HTTP:实现网页版石头剪刀布
21 | HTTP:用express优化石头剪刀布游戏
22 | HTTP:用koa优化石头剪刀布游戏
23 | RPC 调用:什么是RPC调用?
24 | RPC调用:Node.js Buffer编解码二进制数据包
25 | RPC 调用:Node.js net建立多路复用的RPC通道
26 | 项目启动:整体需求分析
27 | 项目启动:极客时间App下载页开发
28 | 课程详情页:极客时间详情页需求解构
29 | 课程详情页:将ES6模版字符串改造成模板引擎
30 | 课程详情页:极客时间详情页需求实现
31 | 课程播放页:极客时间播放页需求解构
32 | 课程播放页:GraphQL API服务
33 | 课程播放页:极客时间播放页需求实现
34 | 课程列表页:极客时间列表页需求解构
35 | 课程列表页:用 Vue/React 进行服务端渲染
36 | 课程列表页:极客时间列表页需求实现
37 | 性能工具:HTTP服务的性能测试
38 | 性能工具:Node.js性能分析工具
39 | 代码优化:JavaScript代码性能优化
40 | 代码优化:内存管理优化
41 | 代码优化:Node.js C++插件
42 | 多进程优化:Node.js子进程与线程
43 | 多进程优化:Node.js cluster模块实战与源码解读
44 | 多进程优化:进程守护与管理
45 | 架构优化:动静分离
46 | 架构优化:反向代理与缓存服务
47 | 概念:框架设计和工程化
48 | 概念:设计模式
49 | 概念:Serverless
50 | 服务端框架搭建:koaless
51 | 服务端框架搭建:屏蔽请求细节
52 | 服务端框架搭建:完成服务端框架
53 | 云函数式工程实现:服务端代码
54 | 云函数式工程实现:工具端代码
55 | 加餐:调试 Node.js 源码
56 | 结课测试&结束语
57 | 彩蛋:这是一个严肃的课程
本节摘要
登录 后留言

全部留言(42)

  • 最新
  • 精选
Geek_East
想问下老师这个画板工具是啦个?有点顺畅啊感觉!

作者回复: photoshop和灵巧的双手

2019-11-15
24
极客时间
http2的tcp是全双工通讯 http1.1的tcp是半双工通讯 这样理解正确不

作者回复: 大概可以这么理解。你的昵称头像真牛逼

2019-12-23
4
14
天际归鸿
没接触过后端,这点好难理解啊,老师,怎 么样才能快速理解这点

作者回复: 不用因为没接触过后端而觉得束手束脚。跟前两节课说的一样:rpc和ajax就是差不多的东西,ajax的底层、http1.1的底层也就是半双工通信。你只是在更深入地理解前端技术。

2019-10-20
2
7
blulu
老师,全双工通信是指两端都能收发吗?还是本节里面为什么用buffer?自己理解是net模块没有做过多的封装解析,所以必须用二进制字节传输,通过buffer实现解析可用是吗

作者回复: 是的。 net模块是对tcp协议的封装,tcp协议本身传输的就是二进制数据。所以这里就用二进制数据了, 虽然http是文本协议,但是它底层是tcp协议,http文本在tcp这一层也是会经历从二进制数据流到文本的转换过程的

2020-03-21
4
浩明啦
老师 为啥不直接用Buffer.from来直接填充那些值呢这个多方便啊,用那个这个readIn32这个api好处是啥?

作者回复: 因为这是一个和后台协商好的协议,每个字段的类型和占用位数都是要和后台对好的,粗暴地from不一定方便控制这点。 只是为了写代码方便可以用protobuf

2019-12-11
3
fiveone.lwq
多路复用具体是指什么哈?老师能稍微详细说明下这个多路复用吗

作者回复: 多路复用就是在一个通信通路(tcp连接)上多次进行通信,减少建立连接的消耗。所以最好要求通信通路支持全双工通信

2019-10-19
3
Geek_216fd5
老师,client 端每隔 50ms 发送一次请求;server 端收到请求后,每隔 10 + Math.random() * 1000 毫秒回复一次;那么,这意味着 server 端收到多个请求,比如 4~5个数据后,才响应其中的 1 次请求。我先问下, server 端收到的这多个请求是如何存储在 server 端的,这个问题在代码里并未显式体现。

作者回复: Javascript有函数上下文这种概念,因此假设你在服务器接收请求的回调函数里执行了其他异步操作,该异步操作的回调函数本身就会“存”请求,因为请求相关的数据会存在于回调函数的上下文里。 该异步操作完成,执行回调函数的时候,回调函数里可以直接获取请求相关的数据并将返回值写入socket。

2021-07-14
2
jsh
老师,是rpc 需要buffer 格式数据,还是后端的数据大部分都是buffer 格式

作者回复: 严格来说,计算机底层传输的时候都是二进制数据。 但只从应用层面理解的话。rpc也可以传文本数据,但是因为压缩率的关系,业界的后端传输一般使用protobuf之类的buffer格式。

2020-10-02
2
逃之玉諑
对RPC这部分比较感兴趣,希望老师后面可以有关于这方面的实战

作者回复: 实战项目章有这部分内容,Rpc的客户端和服务端都有实现

2019-10-24
2
2
myj
function checkComplete(buffer) { if (buffer.length < 6) { return 0; } const bodyLength = buffer.readInt32BE(2); return 6 + bodyLength } 包的长度占header中的后4个字节,这里readInt32BE的时候怎么保证只读取4个字节呢?

作者回复: int32就是32个bit也就是4个byte

2020-07-29
1
收起评论