粉丝1010获赞5547

这一节课的目的是把淘宝原码部署到这一个 ip 所对应的 center os 服务器中,使用 pm two 管理工具运行 淘宝。然后在浏览器中访问 center os 服务器,可以看到你不熟的淘宝,并能够查看到所有分类下的具体的产品。 接下来我讲解他的操作步骤。在 next 下面部署露的结实的淘宝网站。需执行 以下步骤。第一个,在 center os 中安装 nodejs, 其中有一个大家需要注意的地方,你一定不能执行这个命令,不能执行,执行完后安装 nodejs 会发生错误。 接下来我们开始安装 note 结石。打开 x shield 软件,连接到 center os 服务器。 首先我们获取 center o s 幺六版本的安装员,大家记住只能是幺六以下 的版本,高于幺六以上的版本安装会失败。高于幺六以上的版本建议安装 center os 八点五版。 下面我们复制这一个命令行,粘贴到 excel 中。 回车这个地方让你等待,因为现在 load 已经到了二零版本。 接下来我们开始使用 yum 命令安装 low 的结石。 为了学生看得更清楚,我先清屏 执行 yum install load g s。 开始下载 load g s 的安装程序。 node g s 就开始安装。安装的过程稍微有一点缓慢,大家稍微等一下, 在这个位置提示里是否继续安装。单击 yes, 回车它。开始下 下载 load gs 幺六点二零的安装包。接下来问你是否继续单击 y, 回车,继续安装。 当你看到这一个信号的时候,就表示 load js 安装完毕。接下来我再按 clear 清屏, 执行 load worrying, 检查 load 的版本是 v 幺六点二零点二, 再执行 n p m 的命令检查 n p m 的版本是八点 幺九点四。 n p m 是 load 当中的一个软件管理包,专门下载 load 这一门语言当中的软件包。 例如大家熟悉的 web 服务器框架 express 是 n p m, 安装 my c 口的连接库也是 n p m 安装。 n p m 是 load 当中的一个软件包的管理器 low 的 gs。 安装完毕后,接下来我们使用 npm 命令安装一个 pm two 的 web 服务管理工具。 为什么要安装这一个 web 服务管理工具嘞? 因为在上一节课,我们直接使用 load 命令来作为 web server, 会发现淘宝网站会有一些卡顿 log, 本身所提供的 web 服务管理器功能较弱, 所以我们使用 pm two 这一个 web 服务器的管理工具。接下来我执行 npm install 负极, pm two 这个负极 代表全局安装。接下来我回测他开始安装 pm two 这一个网站管理工具。 安装完成后,输入 pm two, 出现如下状态表示 pm two 安装完毕。 接下来我们拷贝淘宝原码到 center o s 中, 大家打开自己的淘宝源码,右键在文件浏览器中显示,把淘宝 点 note g s, 点幺四七三点 c n 这一个文件夹复制到桌面上。 复制完后打开插 sale, 右键用 x f t p 打开, 进入 module 日目录,把淘宝点 note g s, 点幺四七三点 c n 拖动到这一个文件夹, 由于这个文件夹下面有 load modules, 所以复制的时间稍微久一点。 复制完毕后,接下来我们要确保你的 levicate 可以访问到淘宝的数据库, 这个淘宝的数据库一定是这个叉 c l 当中的 center o s 这一个服务器的数据库,下面我们打开 levicate, 打开 levicate 后,双击 center vs 服务器的 ip, 确保你拥有二零幺八张三 t b 这一个数据库。关于 my c q 的安装以及数据 库的安装在前面的课程已经讲解,如果不能连接到 center os 的 mecco 服务器,请参考以前的课程。 接下来我们打开 f t p, 进入淘宝,点 load j 十点幺四七三多 c n 的 h t m 文件夹,修改 index 页面, 把 local host 本机地址改成你的服务器地址 文件保存,再打开产品列表页面, 找到这个 local host, 把它改成幺九二点幺六八点二三八点幺零。 这个 ip 地址要用你们自己的 ip 地址文件保存关闭, 再退回到这个目录。打开 mysql 的文件,确保你的数据库名 一定要和这一个一致。大家会发现这里的数据库名是小写,这个名字 字是大写,我们把这里的名字修改成和它一致。 t b 单击文件保存,修改完数据库名后,我们还要修改这一个数据库的所有的表格的首字母为大写, 所有的首字母以前是大写,现在变成小写的原因是 levicate 有 一个 bug, 从 windows 考过来的数据库,它的数据库的表明以及数据库的名称都会变成小写。 关于这个 bug 的原因,在前面的课程我们已经有阐述,我这里就不再追溯。 数据库修改完毕, 接下来我们使用 p m two 命令运行淘宝网站, p m two 命令的构成是 p m two 后面跟 start, stop, restart 等指命令来运行你的 load 结实程序的歧视文件。接下来我们去 center o s 中执行这一条命令, 切换到 center os, 进入 module 文件下面的淘宝,点 note g s, 点幺四七三,点 c n。 回车 先查看一下文件。在这种状态之下,还要进入一层目录查看一下文件,看到如下文件,表示 是已经进入了 road g s 的可执行文件, u s 点 road g s, 点 g s。 一会儿我们要执行这一个文件来启动淘宝, 下面我使用 pm two 命令 start u s。 点 node g s d g s。 下面我回车呈现如下状态, 在这种状态你看到有一个 online 的标识,就表示 note 结石已经成功运行。接下来我们使用浏览器访问 这一台 center os 服务器的三千端口,接下来我打开浏览器,输入幺九二点幺六八点二三八点幺零端口三千回撤, 你就可以看到淘宝的首页,单击其中的分类信息,可以看到第二个页面,单击具体的商品,可以看到商品页面。 这就是啊把淘宝部署到 center o s 服务器中露的 g s 编译环境的方法,谢谢大家的观看。

前面的三期视频,我们在 windows 下面编写了 note g s 的三个程序,分别输出了 hollow water, 计算了累加和,还有编写了第一个外部硬要。 今天的话,我们在 linux 操作系统乌班图里面来编写 note gs 的第一个程序。首先的话,我们先看一下我们的那个 notegs 安装了没有,我们在桌面上面点鼠标右键,选择在中端打开, 然后我们在命令行输入 note 杠 v 好是没有安装的,我们看一下 npm 安装了没有。 npm 杠 v 那么也是没有安装的。首先的话,我们现在安装 note gs 速度 apt install note gs 好,我们敲回车,然后输入密码确认一下 好,已经在安装了。这里的话我们选择 y 庞大的 g s 安装成功了,我们看一下 note 杠威好已经安装成功了,安装的是十八点幺九点幺。接下来的话,我们安装一下那个 npm 搜度 a p t instore n t m 好,我们敲回车,这里的话我们选择 y 好。 npm 安装成功了,我们试一下 npm 杠威 好,它的版本是九点二点零。那么到这里的话,我们的那个 note g s 和 n p m 都已经安装成功了,我们先把这个窗口给它关闭掉,然后我们在桌面上面点鼠标右键,选择新建文件夹,文件夹的名字我们叫 note g s 好,把它拖正一下,然后我们进到 note g s 文件夹里面来,然后在空白处点鼠标右键,选择新建文件夹,创建一个文件夹,叫做 hollow world, 好,我们再进到文件夹里面来,我们在空白处点鼠标右键选择在中端打开,那么这个时候我们是要用那个 vs cod 来打开那个我们的那个文件夹来进行编写代码,那么 vs cod 的话,我们安装的话可以在应用中心, 然后在搜索应用这里输入 vs code。 好,搜索出来的话,正常的话就我们这里是顶安装就可以了,如果没安装的话顶安装,如果安装的话就不用管它,那么我们回到我们的那个文件夹里面来。 好,我们在命运行这里输入那个括的空格点,然后敲回车。 好,我们的 vs 库德打开了这里的话,我们选择试,然后把它最大化,然后把这里关掉,然后我们在自营管理器这里点鼠标右键选择新建文件,文件名的话,我们叫 hello word。 点 js。 好,已把文件创建成功了,接下来的话我们就可以开始编写代码了。我们输出 hello word 的话,用的是 console 来输出 console l g hello word, 好,那么到这里的话,我们的代码就已经编写完成了,我让 ctrl s 保存一下代码,保存以后,我们把这个 ys code 最小化,我们回到命令行,我们用 note 来进行编译 note, 哈喽, 我们可以按 table 键进行补钱。好,我们敲回车,那么我们的 hello word 是已经输出了,那么我们回来看一下代码, 代码的话是比较简单的,只有一行代码,我们通过那个 ctrl 来输出那个 hollow water, 那么这个就在 linux 操作系统误班图里面用 vs cod 来编写第一个 note gs 程序,按照惯例的话,我们输出了 hollow water, 那么代码是比较简单的。

嗯,哈喽,大家好,我是你们的好朋友,可乐薯条炸鸡,本次和大家分享的仍然是我的, 呃,叫啥了? i m 开发学习笔记啊, i m 卡。然后本次的话我们讲的啥呢?呃,本次我们讲的是正点原子,它这个第十章和大家分享的是呃,正点原子,它这个第十章系原版 led 小 灯的实验。之前呢,我们不是拿会编点亮的这个 led 小 灯吗? 现在呢,我们想拿 c 来点亮这个 led 它的小灯啊,看一下我们的笔记。呃,首先呢,咱们这个细圆 led 小 灯简介就是之前呢,我们是会边点灯,现在呢,我们是细圆点灯, 包括硬件的原理分析,和之前一样啊,没啥区别。然后什么实验程序的编写,实验程序的编写呢?我们就多了几个文件呐,原先呢,我们只有一个会编文件,就只有一个会编文件,现在呢,我们又多了两个文件,一个是点 c 文件,一个是点 h 文件。 关于这个会编文件的编写部分呢,我们可以先看一下 skm 十二中的启动文件, 启动文件就是。嗯,我就直接说一下这里边的主要功能是啥吧。第一个呢就出纸化堆栈指征,第二个出纸化 pc 指征,第三个出纸化终端芯片表,第四个配置系统时钟,第五个的话就调用星空函数跳转到星源的世界, 这就是 s t m 三二它那个启动文件嘛,启动文件做的事情,说白了就配置一下呃,夕元的环境,简单来讲就是配置一下夕元的出厂环境嘛。 对于呢,我们这个 imax 六 u 的 话,它后面部分和夕元这个起和三二单面七这个启动文件呢,其实大体上的思路是差不多的,就总体来讲呢,都得有一个中段向量表,都得有一个,呃,中段 项链表的设计,都得有个中段项链表的设计,然后还得有个啥设计呢?还得有个复位程序的设计,还得有一个复位程序的设计,就说复位啊,呃,中段服务程序它的设计, 程序的设计,然后还要有什么设计呢?还要有啊,粗制化,堆占纸真以及呢,粗制化一下,比如说占的大小这些东西都有啊,但是我们本次分享我们本次分享里吧,其实吧,只有那个粗制化一下堆占大小这个设计。 好,我们看看本次分享这块啥,第一个就消息标号,就是一个程序的入口,然后这个消息标号 start。 这里边呢,大家把这几行代码结合到一块看,就将这几行代码结合到一块看,就做一下呃, c p u 模式的切换, c p u 运行模式的切换, 将 cpu 的 运行模式切换为 svc 模式,注意啊,这一二三四四行代码结合到一块看,然后就是 cpu 运行模式的切换,然后接着呢,还有这两行代码,第二行代码呀,就是跳转到信源的世界,呃,不再返回了,这个就是那个设置一下占时针, 我们写写下呀,就是 ddr 外设, ddr 外设的起始地址为,注意啊, ddr 外设的起始地址为零矮个四八一二三四五六七 这块啊,关于这点先和大家说一下,接着呢我们再和大家聊一下关于这个 svc 模式,就 cpu 运行模式这块先说这点啊, 现在第二条,第二条呢,这边写了设置对点指针为 v x 八零二,然后后面呢是五个零,我们要强调了 d d r 的 话,它的起始地址是 v x 八,后面七个零, 所以说呢,我们这个设置堆栈尺寸,它的本站来讲啥呢?大家想一下。这个呀,是 dtr 它的起始地址,然后在 dtr 起始地址的基础之上加上了一段地址的大小,最后呢得到我们堆栈尺寸的位置,不就是粗制化一下占空间吗?这本站讲就粗制化, 粗制化占空间, 而当前这条指令它本身的含义就是初矢化占空间。由于啊 d 加起始地址是零 x 八起个零,而呢 contact 是 a 七内核,它的堆站呢是向下增长的,堆站是向下增长的,所以说 sp 指针指向这个位置呢,就初矢化下占空间, 而且我们要强调的是是初矢化 s v c 模式下的占空间大小为两兆字节, 两证字节啊,做裸机开发已经够用了。好,接着就说一下 svc 模式了,以及呢,我们这些会编指令,和大家简单聊一聊, 我们先看一下这个呀,是 cpu 的 运行模式,处理器的运行模式一共有九种,大家把这九种我先暂停一下,简单看一眼即可。让我们关注的呢,就本次我们要关注的是 svc 这个运行模式,超级管理模式,特权模式中的一种,权限非常大的那种呦, 这第一个我们要知道的,而第二个我们要知道的是,对于三二单片型而言, skm 三二单片型而言,它只有两种运行模式,一个是特权,一个是非特权。但是这个 com 克克泰克斯 a 的 话,它是有九种运行模式的,就说 com 克泰克斯 a 系列,它这个运行模式啊,更多了。好,说完了, 接着就是 comtexa 下面的寄存器主, m 架构下,提高了十六个三十二倍的通用寄存器, r 零到 r 十五,提高前十五个寄存器为通用寄存器。这边我们需要注意的是, r 十三是堆栈指征, r 十四是链接计算器,而这个 r 十五是程序计数器。后面两个啊,都是状态计算器,一个是 c p s r 程序状态计算器,另外一个呢, s p s r, 它是程序状态计算器的一个备份。 关于这个 context a, 下面这个计算器组,大家还是要看一看的,还是有两用处的。 今天我们要说的是九种运行模式,每种运行模式都有一组已知对应的契传器主,这个契传器主啊,我们得加一下逻辑契传器主,注意啊,是逻辑契传器主,就说九种运行模式,每种运行模式啊,都有一组已知对应的逻辑契传器主。 在这些计算器当中,有些是所有运行模式共用的同一个物理计算器。注意啊,物理计算器有共用的啊,各个模式它有自己独立拥有的一些啊,计算器, 我们可以看一下下面这张图。下面这张图啊,灰色的部分表示了啥呢?这表示的是啊,这九种运行模式,九种运行模式它共用的计算器,比如说 r 零到 r 七啊,是九种运行模式共用的计算器。 而对于 f i q 模式呢,这些啊,是它特有的计算器,对于 i r q 模式呢,这些也是它特有的计算器。而后面啊,我们举了个例子,对方说了,在所有运行模式中, r 零到 r 七是共享的同一种物理计算器, 然后呢,什么叫各个运行模式独有的计算器呢?比如说 f i q 模式下, r 八到 r 十四是独有的物理计算器,假如某个程序在 f i q 模式下访问 r 十三计算器, r 十三就这个东西啊,就这个堆栈指令计算器, 那么呢,它实际访问的是 r 十三, f i q 就 这个东西,然后假设呢,这个程序啊,在 svc 模式下访问 r 十三计算器,那它实际访问的物理计算器是 r 十三。 svc 这块啊,是我们要想象的哦,标出来这个大家要重点关注的,下面就有一个总结嘛,是我们这个计算器啊,三十四个通用的计算器,就把这些计算器,实际的计算器算起来,一共有三十四个通用的计算器。我看看啊, 我们来算算,是不是有三十四个物理计算器啊?这个呢,是几个?二四六七七个, 然后这块是几的,我看看二二二二一,然后划一下,这是六,这是四, 这个是一,最后合到一块了,这个十八十八加十六等于三十四,是三十四个它的净水器。大家把我现在清出来这些 贴出来,这些加到一块就有三十四个通用的计算器,除了有通用的计算器之外呢,还有转来计算器,转来计算器, c p s r 嘛? s p s r 还有呢? h y p 模式下独有的一个计算器,这个叫啥来着?呃,我也不知道 e l r 好,这第一个啊,接着呢,还有就是我们要讲的会编指令嘛,会编指令有两个,一个是 mrs, 一个是 msr, 大家可以看到这个本站来讲啊,就是状态计算器,这个状态计算器和通用计算器之间做一下数据的传递, 这块写的是特殊计算器啊,特殊计算器 c p s r 将数据传给阿零,这个不是吗? c p s r 将数据传给阿零,而这个呢是阿零将数据传给专来计算器。 后面呢就有一些逻辑运算相关的操作了,像我们,呃,那条指令里边呢,比如说 b i c 操作呀,还有 o r r 操作呀,什么二维 以安慰语操作呀,安慰或操作呀,还有安慰清除操作呀,什么安慰或非操作呀,安慰一伙操作,这些逻辑就算会编指令,大家也是看一眼就行了,下面就给大家讲这个了, 我们这个会编代码哦,会编呢?对,我们这个会编代码,就现在大家看估计就能看明白了。说这个进入 s v c 模式下,第一个呢,就是将 c p s r 计算器的值复制给 r 零一步,然后第二步呢,就做一下啊,未清除预算,还有未获预算。然后第三步呢,就将 r 零的值复制给 c p s r, 嗯,最终完成了相应的切换。而这里面我们关心的啥呢?就说 c p s r 这个计算器是不是可以用来做 svc 模式的切换,用来做那个 cpu 运行模式它的一个切换。我们给大家找一找啊, c p s r 计算器,这个可能没有截图,没事我截一下呀,看看 c p s r 计算器要干啥用的, 找到了,就这个东西,我把这张图给大家截一下啊,不用截图了,大家看一下,这个就是 c p s r 计算器,我们看啊,最低的五比特是干啥用的?大家看 c p s r 计算器最低的五个比特位。 看好了,这就是我们 c p s r 计算器最低的五个比特位,就来做 cpu 运行模式的一个切换的,其中呢,我们的 s v c 模式,它对应的使用 t 指数是 minx 幺三。我们要做的第一步是啥呢?第一步是啥呢?大家可以看下这个代码, 第一步呀,就是将我们的 d 五比特清零,然后第二步呢,就 d 五比特换上一个 minx 幺三,对应切换到 s v c 模式。 估计这么讲大家应该没有不明白了吧,这个就是切换 svc 模式,这个呢,就设置一下,设置一下堆栈的大小,这个呀,就是呃,跳转到戏园的世界,这个堆栈大小为两兆嘛,因为 ddr 其实地址是这个, 然后堆栈指的呢,它要指向站顶,那么堆栈指的呢,要指向站顶之后呢?我这个 sp 指针它是向下移动的, 因为站呢,它是啊,高地指向低地指方向延展的。好,这么回事啊,好,下面呢就是俺们的细圆,我们的细圆呢,细圆的话大家先看 m 点 h, 这个咋边写的? 前面这些不用说了,这是 ccm 相关一些计算器的定义嘛。 ccm 不 就是那个呃时钟相关的配置了吗?时钟数相关的配置他有些呃计算器的定义,这个是转成一个地址,将立体数转成一个地址,这个做一下应用操作, 这个不就是指征中的铁饮用印刷符吗?铁饮用印刷符 ok 了。 然后这个呀,是 i o max 相关计算器的配置,我们可以看一下,这个是 i o max 相关计算器的配置目的呀,一个是 max, 一个 p a t, 不 就配两个嘛。下面这个是配那个 get 特性,引脚的 get 特性,然后上头这个呢是配引脚的费用功能,配引脚的费用功能 附用功能,要不写一下吧。这个是配 配置外设时钟使能,我写下配置外设时钟使能,这个呢写下第一个配置 io 引脚的,呃,赋音功能, 这个是配置 io 引角的电气气体电气特性,我就不那么懒了,该写的还给大家,简单写写吧。然后这个就是 tpl 外设的配置了,这个就是 tpl 外设的配置了。 tpl 外设配置啊,转完了,点 h, 转完了,下面就说点 c 了呗。点 c 的 话,大家可以看到第一个叫外设,始终只能计算器赋值嘛。然后第二个呢,就是 led 小 灯,它那个触电操作。 第一步大家可以看到配置一下 i o 引脚的功用功能,然后第二步呢,就配置一下 i o 引脚的电梯特性。 那第三个呢,就触碰一下 t p i o, 配置一下外侧的方向啊,外侧方向是那个输出啊。 接着呢就是写录一个数据,这个数据是基电瓶,表示点亮小灯,下面就是小灯点亮操作和小灯熄灭操作了。一个呀是数据计算器,它赋值为零,代表点灯。一个呢是数据计算器,赋值为一,代表灭灯。 然后别忘了一位啊,因为我们用的是啊, t p i o t p i o 这个一杠三,所以说这块要移三个比特。最后呢就我们的延迟函数了,这个延迟函数啊,大家看一下就行了。延迟函数 啊,这块有写了,说当前这个延迟函数啊,他已经设计好了,说是在三九六兆赫兹的主频下,延迟时间大概为一毫秒, 这是我们现在这个延函数比例,这个延函数它的延迟时间大约就等于一毫秒,至于咋设计出来的呢?这个就不需要我们担心了,我们只要知道这个比例上的它延迟时间为一毫秒,这就可以了。 最后就是我们的命令函数了,先是打开外设时钟,然后触指画一下小灯,贴着就死循环啊,点灯灭灯,中间呢,延迟五百毫秒,我们就可以看到我们开发版的那个小灯一闪一闪的那个效果了。 后面呀就是 makefile 相关的说法了, makefile 大家可以看到这个呀,都是点 s 文件变点 o 文件都汇编, 汇编呢,转为点 o 文件,而这个呢,它写成啥呢?我们的细研转为点 o 文件,这个就清楚吧,清楚一些中间的没用的文件。而至于这个啥呢,大家可以看到啊,第一行就是链接地址的一个设置,第一行设置链接地址,就将若干个点 o 文件写下吧, 要注是咋写来着,这么写,这是链接器,链接器将若干个点 o 文件链接到, 呃,指定地址,指定地址零 x 八七八,然后一二三四五五个零,为啥是五个零呢?因为我们是三十二位的 cpu 嘛,它的地址为呃八个, 为啥呢?为三十二比特,对,为三十二比特嘛,地址为三十二比特。 这种连接器,将若干个点 o 文件,然后链接到指定地址处,这里面我们需要注意到啥呢?关于这个链接啊,我们需要注意点啊,就这个 start 点 o 文件得排到前头,然后 main 点 o 文件,或说其他点 o 文件,这个就随便了。 为啥 start 点 o 文件得排到前头呢?因为 start 点 o 啊,它是绘编文件。绘编嘛,绘编的目的啊,是配置这个信源的环境,它是来配置信源环境的,我们这个绘编它是配置写下 start 点 o 文件一定要放在最前面, 原因是会编文件是,是否是用来配置新语言运行环境 的?这个会编呢,得放到前道,会编是配系元运行环境的。所以说现在我们大约可以看出来这个程序大体的结构了。首先就是 i v t 啊,注意,我,我只能是下载一下,下载到啊 s t 卡里边那个程序的结构啊。第一个是 i v t, 然后第二个呢就是我们的 boot boot data, boot data, 然后第三个呢就是 d c d 然后第四个呢就是我们的 start 点 o, 第五个呢就是 main 点 o, main 点 o, 然后这个提示位置 smart 点 o, 提示位置是 vx, 八七八五个零,然后这块大小呢是三 kb, 然后前面呢还有一 kb 的 偏移量,这就是我们程序它整体的一个内存映像。内存映像, 要不这样吧,我给大家画一画,我觉得这个还挺好的。嗯,我要记录一下,记录一下我光辉的时刻, 毕竟我光辉的时刻不多啊,画一下,记录一下我光辉的时刻, 看一下。 好,我调调文字啊,文字,这个第一个叫一 kb 的 偏移,一 kb 的 偏移量, 嗯,这个是 i v t, 然后这个是啊簿 date, 这个叫啥?这个叫 d c d, 然后这个叫啥?这个叫 start 点 o。 当然了,像这种简单的程序,我还是能给大家画一下内存整体的印象的。难的就画不了了,画不了了,因为它太费劲了。 文本。然后呢,这个叫,叫啥来着?叫 may 表 o, 然后看一下接着要画啥 好。 嗯,不错,这瓜再写几个字,这叫三 kb。 三 kb, 然后这瓜再写几个,再写一个字,叫 star 的 点 o。 呃,对, 这怎么搞的?对应的链接地址为 零 x 八七八一二三四五。好了,这就是我们的文件了。嗯,这是一个光辉的时刻,我得记录下来。好, ok 了,这是我光辉的时刻,给记录下来。这张图呢,要保存了。好,我们先暂停,暂停几分钟,对我表示一下尊敬。嗯,毕竟好不容易画出来的就这个猫东西啊。好了,说完了, 这个是啥呢?后面这个呀,就是将我们的呃点 e, l, f 文件给它转成点 b 文件这行指令的含义。而至于这行指令啊,就是返回边, 返回边呢,然后这块有一些语法。说一下,像这个 double 符艾特它表示的是目标,目标文件, 目标文件,这个是 makefile 的 语法,而这个呢,表示的是第一个依赖文件,第一个依赖文件, 而目标文件说的啥呢?目标就说了它目标,然后依赖说的啥呢?就它依赖,就它, 然后。至于这个多了符啊, obs, 这个时候取一下变量中的数据,取下这个变量中的数据,这玩意展开了就是啊, start 点 o, main 点 o。 好, 这个是目标啊,目标文件,目标文件, 目标 file, 这个是所有的依赖文件,就所有的。呃,依赖文件,所有的依赖文件。这个不是添加号码小何才路添加脚, 然后对应正则。表达式中啊,就表示起始这个,呃,美元符号表示正则表达式中的结束啊。 好,说完了,这个能讲的基本上都讲完了,然后最后就改一下这个可执行文件的权限,然后运行可执行文件给他下载到 sg 卡里边了。这个就不给大家讲了,下面我们讲一下这个链接脚本的使用啊,有链接脚本使用, 这款我们不有个链接地址吗?我们觉得用链接地址不够专业,就把这款给改成一个链接脚本,显得更加专业一点。我们可以指定一下。 为啥要用链接脚本呢?这我们可以指定一下,比如说代码段呢?数据段呢? b s s 段呢?还有呃, root 这四个段里的,呃,具体存放什么东西 就可以人为呢?修改一下这里面存放的数据啊,存放的东西像第一个它就指定一下,比如说这就是一个例子,指定一下我们代码段它的内存地址是多少?代码段呢?它的内存地址是多少? 而这个呢,就指明一下我们数据段它的内存地址有多少。因为练习脚本配起来更加灵活嘛,我们既可以指明代码段的呃内存地址,又可以指明数据段的内存地址,当然还可以指明 b s、 s 段它的内存地址。 而前面这个 l l 四啊,就说我们的内存地址,注意啊,是内存地址,内存地址四个字节对齐。 内存地址啊,要求四个字节对齐,这块有写有介绍啊,我们要求代码段链接到呃,这个地址处, 还有呢,我们要求数据段是放到这个地址处,大家再往下翻一翻,数据段呢,链接到这个地址处,嗯,数据段链接到这个地址处 后面呢?这个 align 四指的啥?就指的是我们的地址要做呃四个字典的对题啊,四个字典的对题。看 align 四,四个字典的对题,说白了就是我们数据量的起始地址能够被四给整除, 要不这块还标标黑一下吧,还是挺主要的。 然后这个 b s s 段呢?它存储的是啊,定义了,但没有触触化的变量啊。信源中有 b s s 段呢,就存一下啊,我们定义了,但是没有触触化的变量。像这个 b s s 段呢,我们用的时候可以将 b s s 段全都给它清零, 就是人为的给它抽象一下。那我们当前这个代码修改就只改一下代码段的链接地址就行了。第一步改代码段链接地址,然后第二个就这个 start 点 o, start 点 o 要放到起始的位置, 然后注意后面那个星括号啊。点 tag 这块是可以把命令给覆盖掉的,它表示的就是其余的文件。有其余的文件嘛?其余的点 o 文件, 这个星点 type star, 它表示的是其余的角 o 文件。其余的角 o 的 文件呢?它是可以可以包含默认角 o 的, 因为默认角 o 它具体放的位置呢,我们是不关心的。为啥不关心呢?因为我们在 star 的 角 o 里边,它有个跳转指令,它能跳转到默认的, 就是因为 star 的 角落里的有个跳转指令,必默认。所以说我们这个默认角落的位置才不关心。后面什么只读数据段呢?还有那个数据段呢,以及 dss 段呢?这种就用默认的就行了。 好,下面就咱们修改一下 mac flyo 了, mac flyo 就 把它给换成链接脚本,看原先你们链接地址嘛,现在换成链接脚本了,更加的高档点了,然后就下载验证,嗯,没了。本次分享就到这里了,希望大家能够喜欢,谢谢,拜拜呦。

大家好,我在本节给大家讲解 node js 的 答案中, 有些同学他可能连 node js 是 什么都不知道,但是有有些同学他可能已经学过 node js 了,对于学过的同学可以跳过本节。 首先我们来简单的介绍一下 node js, 它首先是一个 javascript 语言的运行时,它采用了事件驱动这样一个模型,它使得 javascript 可以 在服务器端运行, 它底层使用了这个 google 的 v 八引擎,它的作者是这个是这个 怎么读我也不知道。然后我这是它的下载地址,我们在这个地方 note g s 这个地方 点击就可以把它下载下来,这是它的官方网站,我们将它下载下来, 在本地的话,我们可以找到我们下载的呃,这个文件,我把它保存到了这里,我们双击它就可以将它安装起来, 然后我们就接受,然后点 next next next, 然后点 install。 它的整个安装还是比较简单的,跟 windows 下面其他程序的安装是一样的, 只需要下载好它的这个安装包,然后一路点击下面呃,点击下面的 next 呃按钮,就可以将这个 node js 安装起来。 安装完了以后,我们可以在这这个地方搜索,也可以在这个 node js 这个地方看一下,这里面可以点击它的这个 node js 命令行提示。 我们的 node js 是放在了 d 盘的这个 node g s 目录下面,我们先切换一下这个文件夹, 然后输入这一个 node 杠 win, 然后我们可我们就可以看到 node g s 的 版本,现在是十八点一四,然后我们也可以看一下这个 npm 的 版本,这这个版本是九点三 n p m 是 node js 的 这个包的,呃呃管理工具,用来管理各种 node js 的 扩展。其实现在有比较新的呃包的管理工具。 呃,但是我们在这个项目当中我们还是使用这个 npm。 由于 note g s 的 扩展有时候下载起来不是特别方便,所以说我们可以设置这样一个淘宝镜像, 然后我们执行一下这个命令,然后我们使用的这个它镜像就是这个淘宝的镜像 note g s 的 安装,呃。基本上,嗯,还是比较简单的,主要就涉及到这几个方面,谢谢大家。

大家好,我是小雨老师啊,来点评一下那个 cooper sphere 公司的一个产品叫 cooper key 啊,我们用它来那个呃,安装集群添加节点,有同事反映说那个添加节点的时候经常会有一些失败,然后我看了一下相关代码才发现它。这个 怎么说呢,一言难尽啊。就是他去添加节点的时候,他每次都要去操作 master 节点和 e t c d 节点,比如说我要去刷一些那盒参数,呃,在匿的 script 里边,对吧?然后他去,他会 s s h 到 master 和 e t c d, 把你的 node 上的那那那盒参数同样刷到那个 master 上面, 然后包括我看了一下代码儿,它里边其实分了这种一叫 local task 和 remote task, local task 就是 在 worker 本地执行的 remote task 就是 在远程执行的 remote task, 除了它发起的是所有节点,它就会把这个操作在 node 上执行一遍,在所有的 master 和 etc 都去执行一遍。 就这个其实是非常不合理的一个事情,之前也经常遇到,比如说它一次偶发的连不上这个 e t c d 都去执行一遍。就这个其实是非常不合理的一个事情,之前也经常遇到,比如说它一次偶发地连不上这个 e t c d 地点,都会导致它添加节点失败。 其实你想啊,就说我添加一个 k 八 s note, 实际上我只需要做安装一些包,然后抽象一些参数,然后那个做一个 kubota 的 main drive, 其实就已经结束了,它这个代码至少在在我用的这个版本里面,我们用这个版本其实不敢恭维, ok。

假设这个下面可能会有一个 load 服务,我把这里先出 smart 一下, 然后呢直接在这儿创一个 server, 点击 s, 这个里面我们 npm 一 列杠 y 啊,这个时候就其实就有个 server 了,对吧?这里呢,我们可以在这里指定一下那个类型啊,就是模块化的类型, 模块化标准类型。然后呢在这里就是直接把 http 导进来,创建一个基础的 server 啊,这些呢就直接按照它这个提示来,然后呢最后监听一下 server listen 到三千端口, 好,这个服务呢,我们就写完了,对吧?很简单的假设,我们现在去执行一下启动命令,一般情况下呢,我们都会在这儿执行一个 start server, 点 g s 这个命令,那我们把这些全部去掉, 再来到这边直接偏偏 start 回车,现在你就会跑到三千端口,可以看到这个服务启动起来了,对吧? hello world 就 启动起来了。那假设如果现在你在 docker 这一层,你要把它构建成一个镜像之后来去部署它,怎么怎么做呢?还是按照刚才这个思路建一个 docker file dockwell 好。 第一步,我们现在肯定是要用 node 的 镜像来去跑这个项目,对吧?我们什么叫轻量化容器啊?其实就是现在我们这个服务呢,它是需要 node 环境来去跑,那这个时候我们就可以用 node 环境, node 环境呢,你可以用官方的环境,也可以用 batami 的。 好,我比如说就用 batami node, 这个就是选择镜像,选择好这个镜像以后呢,然后紧跟着我们就可以去跑起来跑这个命令啊,其实我们这里呢,因为没有涉及到构建的过程,所以呢跑起来比较简单,就直接 run 啊,先指定一下工作区啊,就是 workspace 指定一下,比如说就指定到斜线 app 下面就是工作区,指定好指定好工作区以后,现在你就可以去跑这个 note server 服务的这个脚本了。怎么跑呢?我们刚才在命令行这边是怎么跑的,在那边就怎么跑,我们这里是 p m start 这样来跑,那所以到那边呢,也是一样的,直接在这儿 c m d c m d 呢就去执行命令,执行什么命令呢? p n p m start, n p m start, 对 吧?但是大家需要注意啊,你现在容器和你的文件,它们俩呢是属于两个世界, 你是文件的内容呢在这,但是你这个容器最后打完包之后,他们俩是互相隔离的,这个时候你就需要在设置这个工作区以后呢,你把内容要复制过去,你可以把当前下面的所有内容呢全部复制过去, 就按照这种形式来去复制, copy 到行,其实就是你下面的所有内容会复制到这个文件夹下面, 好,会复制到这个文件夹下面, ok, 复制下去之后呢,我们就可以去执行了,我们先来看一下啊,整个内容已经写完了,然后我们直接在这儿 docker build 来构建一下这个镜像,构建呢,这个地方就直接叫妙码 node server 回车, ok, 很 快啊,就全部构建好了,构建好之后呢,同学们可以用命令的方式来看,就直接是 docker images 来看一下你当前构建的这个妙码 node server 有 没有了,有了妙码 node server 在 这儿,对吧?它体积还是比较大的啊,因为这个本身呢,它其实, 呃,这个,这个这个基础镜像它本来就比较大啊,然后我们来再来看一看,当然其实也可以瘦身啊,里面可以想办法把它的体积变小。 指定好之后呢,我们接下来就可以去执行了。怎么执行?直接 docker run 执行它命令是这样的啊,我们直接就按照它的提示来把这里呢改一下,这里就不是 n g x, 什么什么,我们把它改成 note, 然后呢这个地方大家需要注意,我们那边的这个跑起来之后啊, 它的服务跑起来之后,其实这个时候是不是还没有往外部去暴露端口?我们这边去监听的是三千, 我们可以来看一下。当我在这里指定成三千,这边也是三千的时候,我们来跑这个妙码杠 load server 看一下效果。回车是不是跑起来了,那这个时候呢,看能不能如愿以偿看到我们的 那个服务三千端口啊,回车看不到,为什么呢?因为这就是我们前面给大家反复强调的,就是你这里 docker file 指定好之后,你里面跑起来的内容呢,它是一定要把端口给外部暴露出去的啊,一定要暴露,把端口暴露出去, 直接 export 三千,这个时候呢,三千内部的三千端口就暴露到外面,可以去监听,这个时候你再来启动它啊,当然呢,我们是需要重新再构建一下,因为你改了内容了,改了内容,所以我们在这边来把容器和镜像这些呢,我们全部都把它删掉,一个是它把这个删掉, 还有一个呢是 image, 把这个里面的镜像也删掉,镜像这个在最下面,在这里呢,把它也删掉。好,删掉之后我们再来到这边,再执行一下那个构建镜像的 mini 回车, 镜像就构建成功了,我们重新再来跑一下,重新再来按照这个 mini 来跑回车,我们再来看,先观察看它跑没跑成功。呃, node server 没有跑成功。哦,我这里写错了, 我看一下,啊, 不好意思,这里写错了,我把这个改一下啊,大家一定要注意引号啊,引号不能错。好,我们重新再来构建一下,当然要把刚才我们已经构建好的这两个呢,先删掉,一个是容器删掉,还有一个是镜像也要删掉,这个 node server 也要删掉。然后我们再来试一下先构建, 然后呢再跑这个容器回车,我们看它跑起来没有到容器这边是不是跑起来了? node server 已经跑起来了,然后呢,我们再来访问三千端口就 ok 了啊,这是 node 服务它的镜像的这个打包方式啊,打这个镜像的方式 好,那这呢,其实都还是比较简单的啊,大家听到这呢,能不能理解?还可不可以跟上?可以跟上同学在评论区来扣个一。

卡拉米使用阿里云计算函数,点击免费试用,先获取三个月的十五万, ceo 立即试用, 搜索一下函数计算 函数列表, 你在杭州创建一个函数 web 函数, 函数名称,创建一个检查外部服务的一个函数 cpu, 零点零五,一百二十八兆,十个 g, 这基本上是最低配置,然后这边五百一十二兆跟一零 g 都是不收费的。最小实力一, 选择代码运行时 note 二十二,运行时使用 vip 包上传代码,然后命令 npm run start, 然后我监听的是九千端口,下面看一下代码,这代码的话, express 主要两个功能,一个是网站测速,第二是检查网站的访问性。 现在我们打包一下, 打包就到这了,下一步把它进行上传, 上传上去,上传成功,然后启动命令,暴露了端口创建, ok, 创建成功。 好,我们请求试一下,点一下部署, 然后现在请求的话需要签名,我们测试不需要签名,无需认证,点击确认,下面看一下它们地址,这边有个公网地址,复制一下, 这是刚创建的两个接口,我们把地址复制一下, 点击发送, 这就是返回了,我们是返回这个 example 网站的数据, 然后下一个截图测速的点击请求, 这是它的一些请求数据参数,这函数服务就部署完毕。

好,各位朋友,大家好,我今天来讲一下 sl 零四这个盒子啊,怎么呃,在 m a r 里面进行设置啊,盒子有两种接法啊,我现在用的是 usb 这种接法啊。 好,首先呢,插件盒子先要给盒子设置一个网,网络 ip 啊,用手动设置啊,手动设置的话在这里啊,点这里,然后点这里, 然后呢找到我们盒子啊,我们盒子是十二兆的啊,然后是 r n d i s, 给它设一个 ip 地址啊,手动啊,打开啊,二点零点零点 点二二是吧,给我们的那个图一样的啊, 好,这样就设好了,设好了的话呢,我们可以先拼一下啊,看通不通对不对, 二点零点零点四四,好,是通的啊,就说明盒子是 ip 也是对的。好,在 m a 二里面我们这样的先打开它, 打开呢,然后呢,因为我们原呃原声支持八个月的解啊,解码啊,就是官方下载软件就可以直接使用八个月就可以破解的啊。然后在 java 里面啊,这里一定是要设他的绘画啊,他这个绘画啊, 一定是幺二七点零点零点幺啊,如果你把这个绘画的 ip 啊改成盒子的 ip, 那 盒子有可能会闪, 因为这个相当于是说把 m a n t 跟阿特 n t 的 数据全部输入到盒子里面去啊,这个贷款是不够的啊,这数据量非常的大啊, 实体控制台也是这样的,实体控制台有两张网卡啊,一张网卡走的就是这个绘画走的是就是说 m a n t 啊,另外第二张网卡走的就是阿特 n t。 好, 第二步, 这里啊,要把 dmx 那 个 note 加进去啊,这里有两个啊,你看到没有把这两个加进去,这是合子的啊,两个 note, 然后第三步啊, 这个 applet 要把它点开啊,这个木呢是八啊,但是我们这里要输入四啊,这一定要盒子的那个真实的输出啊,如果输多了的话呢那有可能会让你的灯闪啊。好,这样就行了啊, 那我们测试一下。嗯好,是吧,等一下我们来打开一个测试软件是吧。 打开一个啊,你看呢现在就输出了,网卡里面就有四个亿的输出了对吧。啊 是吧,要再输到盒子里面去了对不对?好,这个呢,那怎么看解锁多少呢?你在这里啊 set up 啊这里啊, 可以看到哈有八个口是吧?四零九六个。好,那怎么样把它解锁成那个二百五十六个域呢?那我们只要在这里啊,把我们这个插件下载之后啊拷贝到 它的目录啊,它的目录是在这里啊,打开然后把这个拷回进来啊。 好,这样就行了,这个目录是在这个地方啊,不要考到其他地方去啊。啊你看看在这里啊这个目录啊。好,这样就可以了啊,等一下啊 好,你看一下我们再看一下啊是幺二七是吧。好,稍等一下啊。嗯稍等一下啊,它自动就会连上去。好,这个 d m d m x note 我 们要加进去啊。 好,这里 alt 要点开是吧,这只要做一次啊,它会保存的啊,然后再看一下这里啊破解哎,你看到没有它就有了是吧, 它已经破解了对不对啊?然后再看一下输出是吧。呃我们点一下啊输出。 好,这输出的话你看这里面看得到这些输出是吧,然后如果万一你啊没有输出的话还可以怎么做呢?你可以把这个词打开啊,万一啊,没有没有的话在哪呢? 在命令里面啊,在这个地方啊,你开始点开词啊,就把这条命令输进去啊,然后把词打开,他就会有输出了。有输出之后,然后你再保存啊, 那以后就不需要任何设置了啊,就可以了。好, m l 今天就讲到这里啊,谢谢大家啊。

第一步,先创建 http 服务,这个呢,其实我们前面就已经有了,来,我们把前面的这个内容呢导进来,然后呢包括这个 cache server, 好, 我们写一遍吧, import http from http 就 导进来了, 导进来之后来去使用它 const server 等于 cache server 好, 这个里面呢,我们什么都可以不用做 在这个地方。但是一般情况下,我们如果你前端是用 http, 因为我这说了啊,它应该是一个 web socket 的 服务,那如果你这个时候前端在尝试着用 http 来请求的话,我要给你报个错 啊。所以一般情况下呢,我们都会在这儿放一个,比如说什么 error code 等于四百等于四百,好,然后呢,给前端返回一个数据,就 r s 点 right hit, 把这个状态码给它返回回去啊, error code 就 告诉他,你不能够用 i g d p 来请求,你应该用 w s 来请求啊,用 web socket, 你 这个有点货不对版,对吧?然后那我们 r s 点 end, 把内容呢给它放进去,比如说你这是一个 bad request 好,其他东西呢,我们全部都不管,现在我们直接 server 点 listen 刚才的啊, server 点 listen 三千端口,然后呢说我已经监听了,好,我们来同样的 pmpv 回车跑起来啊,那同样道理,这个地方呢,我们要把 type 给它指定一下, 指定之后再来跑起来,是不是跑起来了?跑起来之后我们来到这边啊,不管你是在浏览器的这个里面输入三千也好,是不是告诉你这是四百 bit request, 看到同学在评论区来扣个一啊,四百 by request, 好, 那不管是你在这里呢还是在这里,你在这里也是一样的发送那四百 by request 不 让你请求了,对吧?我,我不让你,我不给你,你要我不给你,那接下来怎么办呢? 既然你这个不给他,那接下来呢,你要想办法,他如果是 ws 过来的话,升级协议里面你要给他。 好,那接下来这里就升级协议,怎么升级呢?我们来看一下它的这个请求的具体细节啊,我来给大家看一下,因为之前很多同学用 ws 都没有怎么去深入的去了解过它的原理,我们就直接在这来看。 constws 等于 new 一个 web socket 啊, web socket 好, 把它触手挖一下,那东西呢?给它放进去,这里你肯定不能用 h p 了,对吧?这里要用 w s 冒号 local host 三千吧,是不是这样没问题吧?好,回车, 回车的时候呢?我待会啊,我待会回车完了之后,同学们要关注这个 w s 这个这个地方啊,当然你自己下去之后也是这样来看。回车,回车之后来看一下这边的 w s, 它是不是没有发出去任何的内容啊, 对吧?这个地方没有发出去任何内容,但是其实呢,你这个地方应该是能够看到的,我们再重新刷新一下之后,把这个 w s 清除一下, 回车扭一下。好,他这里说了啊,就是你这个呢,其实是看不到内容的,你包括发出去这个 connect s c 是 直接拒绝的,对吧?你在这边呢也看不到对应的具体内容的处理,这个没关系,我们呢把它复制一下,把这个 ws 复制一下,复制一下之后呢,我们到这里来看,它可以创建一个快捷请求啊,这个快捷请求呢,你可以去建一个 w 这个 web socket 接口,大家可以看到这里吧?好,把它拿过来,然后呢? ws 放进去,点一下连接,然后它就会告诉你无法连接到这个里面去。好,无法连接,但是没关系,我们重点去看它的请求头,朋友们注意来看啊, header 它有哪些呢? 你看这个就叫协商升级,就说,哎,我们俩关系好,我可不可以升级一下,走个后门?没问题啊,那接下来我就给你去升级嘛。怎么升级?当你的请求头中间有这个 update great web socket 的 时候,这个时候其实这个请求他不会立马的去对你进行处理,而是做升级的处理。

升级的处理呢?它的内容里面大家注意观察,这个里面有个细节啊,这里有个 secweb socket key 是 干嘛的呢? 哎,这个就是它们之间的悄悄话小秘密啊,这个秘密给到后端去了之后,后端对它加盐啊,对它这个 crypto 做一个加密处理,什么生成一个另外的这个混淆字段之后再给它返回回来,再给它返回回来 协商的过程啊。好,我们来看一下这个具体的协商。怎么来协商呢?就是在 server on 里面通过去监听一个 upgrade 就 ok 了。对啊,我现在监听 upgrade 好, 我来打印一下啊,同学们,来把这三个参数都打印一下,看一看最后的效果,这三个参数 保存,然后呢再来重启一下,重启之后我们再在这个地方点一下发送。 哎,太棒了,你看 on upgrade 里面是不是得到东西了呀? on upgrade 里面得到东西了,得到的中东西里面我们也看到了刚才在前端的那个 sec 什么什么什么 k, 对 吧? sec 什么什么 k 也在这个里面,你看现在前端的已经挂起了,这 它是没有任何响应,回去接下来你就要去对它进行处理。怎么处理呢?首先啊,你要从它的请求头上面,从这个 request 的 请求头上面去拿到那个 set web socket key, 叫 sec 杠 web socket key, 这个呢用于生成一个叫 sec web socket act。 呃,这个 excite accept 就是 我跟你说我要升级,你跟我说我接受了,好就可以了嘛,对吧?流程是这样的,那我们现在再来看一看,那我们是不是要获取到这个 key? 这个 key 怎么获取呢?就直接从 request 上面的 headers 里面拿到这个 sec, sec socket, web socket。 key 拿到它以后,我们要生成一个 accept value, 这个 accept value 用谁生成呢?就是用这个 key 来生成这个。具体的算法呀,我不跟大家去细讲了啊,具体的算法我不跟大家去细讲了,我就直接拿过来, 我放在最后面啊,放在最后面这个地方呢会有一个 crypto, crypto 是 用来去做 这个,大家从这里可以看得到生成了一个 shan, 然后呢? base 六十四 digits base 六十四,然后呢做了一个加盐的处理好,这个时候我们就生成了一个 accept value, 有 了这个 accept value 之后,这里呢我们就生成这个 accept value, 等于它传进去,把这个 key 啊, 把前端升级请求得过来的这个内容呢,放进去,放进去拿到 accept value 生成,它就可以给到前端响应的里面去,这个时候呢相当于协商成功。 但是接下来还没完,你把这些内容给到之后,你就要往前端的 socket 套接字,现在就变成套接字了,同学们注意啊,这个地方现在就变成套接字了,要 socket 往前端去发送 web socket 切换协议的响应头 怎么写怎么怎么写呢?就是 socket 点 right 啊,就是 socket 点 right right, 这个里面写什么呢?就是从 r e s header, 我们从 l e s headers 里面,我们这里给它定义一个啊,我们给它定义一个 l e s header, 因为要写很多很多的请求头,我们就直接把它定义到这个里面。这个啊,想一头啊,想一头,说错了,想一头里面要给些什么呢?第一个,第一个是切换协议,切换协议啊, 切换协议的这个叫什么呢?就是直接是 http, 幺零幺, switch and protocol 啊,这些协议,大家去看这个,这个 web socket, 这里去看幺零幺,这里都能看到,对吧?你看这个就是 服务器握手响应的参数,那其实就是这些了,这些我就我就,我就不写了啊,我直接复制过来的,这个节省时间,因为它是官方的官方势力,我们呢把这些全部都给到它这里呢,这些地方给个逗号啊, 好,大家都好,最后还差最后的一个就是什么呢?就是这个 sec web socket accept, 把它也给它拿过来啊,这个里面呢给它传进去,放进去,把这个结果也传进去,这样你的响应头就组装成功了。 大家到这里还能不能跟上?可以跟上,同学在评论区扣个一啊,这个叫升级协议。好,协议升级完之后,这里呢就直接 r n 杠 n 去切换一下 啊,去接去加一个这个杠 n 切换,就是换成这个响应头,最终的这个数据,杠 n 杠 r 嘛,杠 n 杠 r 就 可以了。好,这个时候呢,我们就能够切换了, 能不能成功呢?我们先来试一下啊,现在写完之后再来启动一下哦,这个,嗯,哦,不好意思,这个地方我因为我们是用的 g s 写的啊,用 g s 写的,改一下再来连接,成功了吧。 看到同学在评论区来扣个一,这就是 web socket 协议升级的原理,是不是把 任督二脉打通了?简单吧啊?概念呢?你只要有学习方法对了,学习方向对了,其实很多概念是比较容易的, 你看他的这个文档,那我估计你从头到尾看太难了。这个怎么看呢?这上面又是请求的,又是响应升级的,又是这个什么 sec、 web socket、 accept, 太复杂了,太复杂了,怎么办呢?哎,你看,给大家缩减出来,因为我一直以来啊,不管是自己写代码,还是在这个,不管是平常这个工作中还是什么,我都是追求极简主义啊,追求不管,只要能够 sop 化,能够标准化东西我绝对不来第二遍, 所以你看非常清晰,第一步,第二步,第三步。好,就完成了握手的过程和升级协议的过程,刚才我们从这里就看到了吧,我可以点断开,你看这就断开了吧,我点连接,哎, ws 就 连接成功了,这个就连接成功了啊,连接成功我就可以去看了呀。 在哪看呢?你看,这里不是 message 吗?这里就 message, 这个 message 就 可以看。那比如说我往后端去发一个乒乓乒乓乒乓,是不是心跳?好,我发一个拼过去,你看拼是不是过去了?我再,哎,没反应啊,没反应。我再发一个,拼,好,有没有反应?没反应。再发一个,拼,也没反应,再发一个,还是没反应。为什么呢?因为 我们现在的这边处理数据帧的这个逻辑啊,在这没有做,没有做怎么办呢?