好了,我们刚才讲了服务器端与客户端通信一个例子,然后我们也通过啊,两台 机器来进行一个通讯。那当然,这个通讯我刚刚说是单向的,那还有一种叫双向的。那什么叫双向的?我们刚才做的是服气端,向客户端发送一个消息,那我们能不能怎么着呢?我们客户端向服务器发送一个, 也就是说我们客户端连接成功之后,我们向夫妻发送一个,告诉夫妻,哎,我连上了,那夫妻呢?再给你返回一个。好,我也连上了, 那客户端呢?再把这个数据读取出来,那这样行不行?比如说这两个交错呢?它是一个双向的操作。那我们来做一个这样的例子。好,我们来建一个这样的类,两个类啊,叫打包 siris 吧, 大 boss is。 啊,我们把命方法选中。好,第二个,我们再写一个类,这个类呢,我们叫大 boss, 大包 client。 好,命方法选中。那选中之后这两个代码从那来。注意啊,我先超过来啊,其实代码很简单啊,我先把三万超过来啊,其实代码不复杂。 好,第二个我们把这个 clan 的代码也超过来。 好在我们刚才的 sever 一看他这里边,我们来给大家改造一下。那什么叫改造一下?那我们刚才说了啊,刚才说了我们 sever 和可爱 探测的一个步骤啊,什么步骤?我们骚味先创建一个这样的一个链接,然后我们先创建一个,呃,骚味的一个套一次,然后等待着扣端的请求,弄扣端发出请求之后,注意,我们发出请求之后,我们什么叫发出请求?也就我们创建这个骚客对象这个时候就发送了一个什么, 其实就建立了一个链接,那这个链接的过程中我们给服务器发送一个,可不可以啊?我们添加内容啊。添加内容,那像服务器 发送一句话,发送一句话,那行不行?那怎么发送?注意,我们获取内容是通过叫八分 reader, 那我们发送应该是什么?注意,这个我们叫输出流了。那输出流用哪个?用我们的八分,八分 the writer。 好,八分, 我们叫 bw。 然后等于呢?啊,其实我们有刚才大码,这个大码就比较好写。那 bw 等于什么?等于我们 new buffer the reader writer。 啊,这里边我们怎么写? new out output stream? 好, output stream writer。 那这里边我们写什么?我们写烧开的的,什么 get output stream。 比如说我们获取件当前我们创建的骚 k 的这个套节字的一个输出流,那我们向输出流里边做什么?注意,我们要写数据啊。写数据写什么?注意,我写一句话, 这是客户端,像服务器端、 福气端发送的数据, 发送的数据。 ok, 我们写完了,别忘了我们对于缓存旅游我们一定要有一个方法,叫什么?叫弗拉什叫刷新,我们写完了要把这个数据刷新到我们的什么服务器专区啊?这就是我们扣端加拿大吗?那我们来服务端, 服务端,当我们接受了这样一个链接之后啊,注意,我们在这里边是等待链接的,那等待链接我们这里边来添加数据, 添加数据,添加内容吧。添加什么内容?注意添加我们读取的内容,注意,读取的内容从输入流中读取客户端发送过来的数据。 好,发送过来数据,那怎么去读?注意,我们读数据是输入流,输入流我们用什么?用八分的啊?八分的什么 reader? 比尔啊,等于那,那不是你有, 等于闹,那我们在这个地方怎么写好? br 等于你有八分多一点。 好,八分瑞典。那这里边我们写什么?写,你有,你有什么?你有 input stream, 然后 reader 那里边写什么?我们写刚才建立的这个套叠字的什么输入流。 get input stream。 好,这个我们获取到数据,那下边我们怎么做?我们来读取一行 string line, 等于 b r 点 readline, 那我们就读一, 读完之后我们做什么?我们把这个读的内容呢?我们给他打印出来,我们给他加注释吧。好, 客户端发送过来的数据,发送过来的数据,哎,我们加上客户端发来数据。发的什么?发的 line, 发的 line 好,发的 line 好,我们发完之后做什么?什么都不做,然后呢?我们向客户端再来返回一个数据。好, ok, 那我们来看这个代码能不能执行,我们先执行。 sorry, 代码好,先来执行,服务器启动了,然后我们来执行什么?可烂的代码,哎,我们来看这个有没有反应,没有反应,我们 程序是不是写错了?我们来看看什么问题啊?注意,这里边我们会遇到一个问题。什么问题?这是 red line 的问题, red line 的问题。 red line, 我们读的这个地方啊,他会是一个叫阻塞的方法,这里边为什么他会走到这不会动?那我们来看一下程序是不是到这个地方不会动了? 好,我们这里边写一一一,然后在他后边来写二二二,好,我们来运行一下,看看打印的内容是不是一一一打印了。二二没打印,那我们扣端再来重启,再来启动一下。注意我们在服务器端的这个书窗口里边输出了一一一,那我们发现 这个打印了二十八行,不知道执行没执行,反正二十九行没执行,那我就猜测现在的运行应该是在二十八行,那为什么这里边没有结束? 注意瑞拉也是一个组织方啊,当他没有读到我们的啊,我们的回车或换行的时候,他会一直在等待着内容,那我们怎么让他停停止呢?注意,我们怎么让停止?那我们在客户端的这个地方发送给他的数据,我们加上一个什么? 我们加上一个换行后回车啊,就代表告诉他,哎,你别等了,我已经说完了啊,你不用等了,你直接干你的事。好,那我们来运行服气端,运行成功,扣端,我们点击执行。哎,这个时候我们就看,看到我们先先看什么啊? 先看服务器端的,服务器端代码一一二二都执行了。那服务器端,当我们客户端连接上服务器端之后,我们先执行了一一,然后读了一个烂印的数据,然后我们 把二打印出来,那代表这个数据是执行了,那我们读出来客户端发送过来的数据是什么?这是客户端向服务器端发送的数据,当我们发送完这个数据之后,我们通过书出流,又向我们的客户端发送了一个数据。 客户端发送的数据是什么?就是这是服务器发送数据,你收到了吗?这是客户端接收到的数据啊,那就是说我们从客户端里边向服务器端发送了一个消息,并且从服务器端里边得到了一个消息,那这个就是什么?就是双向的通讯的,双向通讯的。 ok, 那我们把这个代码稍微整理整理,我们给大家留一个作业。好,那怎么呃,留什么作业呢?我们把这个代码我们往上移一移。好,我们移到这个地方来。好,这个地方叫什么? 我们给他加上注释,这也叫添加内容吧。添加内容。添加内容是什么?好,从输入流中 读取内容从输入流中读取内容,这是我们添加内容,对吧?那我们下边是什么?像客户端发送反馈消息的。那,那说这个是我们真正读数据和发动数据的一个一个代码。那我们上面同样道理, 我们上边串门同样道理。那我把这段代码啊往下挪一挪。那注意啊,不影响什么?不影响我们上边代码的啊?好,那这个地方我们也加上注视啊,也叫添加内容。好,是什么?像?像什么?像。 服务器端发送数据,向服务器端发送数据。 好, ok, 那我们发送完这个数据之后,我们可以干什么?还可以再接收数据,对吧?好,我们发送数据,然后再接收数据。那这是他的一个过程。 那我们留一个问题。什么问题?注意看我们刚才福气和我们的这个扣端进行了通讯之后,通讯一次他就停止了。注意,通讯一次就停止了。那我们想办法能不能不让他停止 啊?注意,不让他停止。也就说我们这段大码怎么去改造一下,让他不停止,一直在这样的来回发送信息。那直到我们什么时候结束啊?直到我们输入了固定的直结束啊?或者说我们指定,比如说他互相 发送十次,互相发送十次停止。那这里边我们给大家留一个小作业。 好,作业一好,怎么让这一组啊?通讯。怎么让这一组通讯?怎么让这一组通讯啊?执行 十次。好,那第二个问题, 作业二好,作业二输入的哦,或者叫通信的 文字怎么能够通过 过控制台输入进去?注意啊,这个跟我们 sever 的这个提示是一样的,那我也放到这个 sever 底盘啊,这两个作业是一回事,怎么让我们客户端和服务器端 这一块的代码啊?或者这样的通讯执行十次啊?就说从客户端到服气端,从服气端要到客户端这样一个循环,我们执行十次。第二个,那我们直通讯的这个内容能不能通过控制台去输入啊?这是我们留了一个作业。好, ok, 那这个我们双双向通讯,我们就先讲到这个地方。
粉丝150获赞458

好,我们来看一下 socket io 怎么去使用啊?我们这里呢,去新建一个页面页面吧。啊,在这里搜索一下 socket io, 好找到个 gs 啊,把这 gs 复制一下,好列进来,接下来怎么去使用呢?好,文档里边呢?他看他有一个服务器的 api, 一个客户端的 api, 对吧?我们现在又不编写服务器,所以说我们只看客户端的 api 就可以了。 那么 instory 型表什么意思呢?表示安装如何安装他,他会告诉你有哪些安装的方式。你可以使用 c d n, 对吧?我们刚才就使用的是 c d n 连接过来把,这也是连接过来就完事了,也可以使用 n p m 来安装啊,这里呢,用 n p m, 用幺二,用 p m, 对吧?你可以看到他安装的是哪个包? initialization, 这个表示什么意思?初始化, 初始化。如何是初始化呢?你看他有很多种方式啊。呃,首先你要得到一个 i o 对象,这个 i o 对象呢?如果说你直接在页面上引用 g s 呢?他直接就有了,也可以使用这个用 e s 六的方式,对吧?导入 有了这个 i o g 之后,你就可以创建一个 socket 对象,那么这个 socket 对象怎么去使用呢? the socket instance 表示这个 socket 对象啊,实力到底是什么东西?好,非常简单,一看这个就明白了,对吧?这是服务器端的啊,这服务器端我们不看,我们是看客户端的,拿到这个 socket 对象过后,我们通过 on 就可以监听事件,这事件的名字,这就是这就是 那边传给我的,就是一旦触发这个时间,就那边传了数据过来,那么就触发这个函数,就这么简单啊,就这么简单。比方说哈,我们这里看一下我们的聊天室接口,聊天室接口里面有很多事件啊,就是服务器那边负责触发,客户端那边需要监听。好,我们这里有四个时间,那么比方说这里 updates user 这个事件啊,这个名字叫这个,这个事件的触发时期什么时候触发呢?只要有新任新用户进入了聊天室,他就会推送这个事件,比方说你是张三,你在聊天室里边,这个时候呢,突然邓哥进来了,那么张三就会收到这么一个消息啊,有 老用户退,退出,突然突然那个成哥退出了直播间,那么你是张三,张三也会收到这个消息,还有什么时候呢?还有你自己进入进入这个聊天室的时候,你自己进来了过后也会导致这个用户列表更新,那么用户列表也会重新传给你,对吧?也会触发这个世界。 那么触发的事件的时候传递的是什么消息呢?传递的就是整个聊天室的用户数组啊,我这里每一个用户就是一个啊,就是这么一个东西啊,就是一个,呃,支付券。那比方说就这个事件吧,我来监听一下。 so kiss 啊 啊?如果说有些特殊的事件名字啊,比方说像这种事件名字,你看一下啊,他那一本成他有些制定他有些内置的事件。 connect 表示什么意思?表示已经连接了,对吧? l 表示有错误,对吧? disconnect 呢?表示连接被关闭了 啊,就这么一些事件,其他的我们就可以使用自定义事件,那么自定义事件,我看这个事件的名字叫做 update user, 好,来吧, update user, 当我们这个事件触发的时候,服务器就会给我一个数据,对吧?是服务器触发了一个事件,那么我们这边就会有一个回调函数,这个回调函数里边呢,我们就知道了啊。呃,事件 updates, user 触发了, 点上我们的连接地址,对吧?握手,地址,把地址复制进去啊,保存,现在再看是不是事件触触发了, 哎,那触发这个事件说明啥?说明服务器有推消息给我们,而且推的消息类型的就是这个类型,那服务器会给我们传什么数据?我在哪里获取呢?比方说服务器会给我们传一个用户列表,那我在哪里获取用户列表呢?就是这个是肥料函数的参数,对吧?我们把它打印出来,就这个是好保存 刷新,你看目前只有一个游客,游客四,那如果说我新开一个页面啊,你看一下是不是有两个用户了,对吧?游客四,游客五,那么这边呢?你看又出发了,我一个新的用户进来,这边的事情也出发了,然后我们再 下来开一个新用户啊,你会看到服务器都会向所有的客户团推送这个消息,那现在这边新用户进来了三个用户,那么这边呢?你看又推送了这个消息,三个用户,这边也是啊,消息又更新了, 就这么就这么个意思啊,这是这个事件,其他的事件呢?我们看一看吧,看一看就一样的方式啊,比方说这个事件就自己进入聊天室的时候, 这个因为我们这里呢就懒得去做什么登录了啊,就做一个简易的聊天室,所以说自己进入聊天室的时候呢,服务器会给你分配一个用户名称,就你叫什么名字啊,他就触发这个时间就给你传一个支付串。好,咱们来试一下这个时间吧, name 啊,那么这里是 name 时间,然后呢,服务器会给我们传一个名字啊,保存啊, 好,你看刷新啊,是不是进了个聊天室了,然后呢,游客时福气跟我们分配的名字是这个啊,就这么个意思啊,这就是那个,当然我也可以退出哈。 disconnect 表示断开连接,就是客户端这边可以主动断开连接,对吧?我们这里有个 sockets 对吧? sockets 呢,我们就可以 disconnects 方法断开连接。好,这一断开之后啊,你看这边全部收到消息了啊,不对,是悠着又出发了,对吧,少了一个用户了,你看这边都会都会知道少了一个用户了 啊,就是,这就是基本的逻辑啊。哈喽,关注读一剪辑号的同学啊,我是袁老师,插播一下,要想学正儿八经的前端知识呢,你就好好来看我的大师课。大师课虽然是免费的,没有价格,但它的价值 远远超过你以往看过的任何课程,无论是里面讲的任何内容。比方说什么 v 八原理啊,无忧原码呀,比面试题啊,还有常见的效果实现啊,任何一个你学会了,都可以离真正的高薪跨进一大步。你把这些内容学完了,不用我说,你自己都能感觉到什么,三四十万的年薪不是那么遥不可及。如果说你天天看袁老师短视频都觉得有帮助的话, 那么大师课对你的帮助可以说把我的短视频加起来乘一个十。你开玩笑啊,那是体系知识,不是短视频能比的啊。所以呢,还没有领到的同学啊,抓紧时间可以进咱们评论区第一条,然后呢加入我们的粉丝群,根据提示领取就完事了。

啊?哈喽,大家好,我们这几个讲一下我们这个微宝 rtc 点这个 iog 点 cn 里面的微宝 rtc 里面的一个基础知识,我们的 这是我们第一页,你看一下我们的第一页,第一页我们之前的课程的话就只剩下这两个内容,这两个内容的话对于基础知识里面,我这边那个计划是准备放到最后去讲,我们现在看一下我们的第二页 电液,这是比较多的电液,就是我们这个,嗯,是一些比较常用的,比较常用的,我们看一下这是个 tcpudatcp 与 utp 这两种血液, 你的一个适合度。第二个就是我们的收口的,收口的编程,收口的点 o 这两这个这个这个库。第三个是我们的一个微宝第四的一个完美协商,我们这个上课的这个计划是先讲我们的收口点,哦,这个 这个知识,这个知识有我们的一二三,讲完之后我们再讲我们的 tcp, tcp 讲完之后讲我们的完美服务, 完美完美协商,完美协商讲完之后讲我们如何把 atc 这个公众房报名,这样这个框架就是来自于这个博客,是来自于这个第二列式的作者的一个框架,这个框架的一个作者是一个资深的一个音视频 老师,我们就按照这个顺序来,首先我们先进入我们这个说法的点,啊,哦,这样个 这样的使用这个须知,我们讲一下我们这个一,我们本文的话主要是探讨我们这个时刻点 烧开的点。啊,哦,这个这个框架,这个是一个网络框架,他是一个长连接,这个网络框架他主要是用, 我们看一下他其实主要的一个用力的以及入门的一个方法,他还帮助我们确定了一个说可点啊,我这个理想用力已经能帮助我们那个用户超出我们说的点啊,我支持的一个范围 等于相关的一个应用程序。本文化主要是探讨社会的点啊,如何适用于现金的一个环境,以及我们的技术竞争的一个技术,以及我们包以及我们未来的一个发展方向。 我们看一下我们这个是微把刷给他,我们这个刷客的,嗯,我把阿迪斯我们这个刷客的,嗯,刷客的点啊,哦,他是适用于我们会把 apc 里面的媒体传输通道的。好了,我们这节课就看一下,记住来看。 什么是我们的烧烤点啊?在这个烧烤点啊,这个开发鱼主要叫它产生鱼,产生鱼什么时间段呢? 烧烤的店 啊,哦,这个框架产生于 二零一零年啊,这一年的时候我们 我们才多多多大年龄,我们才才对,对于我来说才上大学,二零一零年到今年的, 我们今年是二零二零一共 发展了十二年的时间,这个说明的话我们这个说过点,然后他有十二岁的年年了, 这是我们今天过程的呢,从这里面总结的,但是他他使用是一个开放式的一个连接, 主要是来促进我们那个实时通信,实时通信,我们的 v 八 tc 主主要是处理 实时通信的,哎,我们这个手法的点,哦,他是 我们会不会把 adc 实时通信的通道, 如果说我们用了,说个点啊的话,那么我们 实时通信的通道框架就是我们这个 这个这个这个框架, 我们这个课程的话,可能讲这个东西的话,以后标出来的课程可能比较多, 他在当时的话是一个新玩意,这个新玩意这个时间指的是我们的一个二零二一年,是一个新玩意,我们现在他已经有十二年的历史了。这个点啊,他是允许我们扩端 和我们服务端之间的一个双向通信的,当客户端在浏览器中安装了我们的一个说好的啊,哦,并且服务 过去以以我们烧烤的啊,那个包食,这样的时候我们才能达到通信双向通信的一个效果。 起,虽然我们可以多种方式进行一个发送数据,但是这里面我们间写数字句间写数据最简单,我们间写数据 这种这种数据就是我们那个惊喜惊喜数据这这种模式, 这就最简单。我们你在做,在做这里面的时候,在这里面做数据常识的时候,我们就把它组成这种 间写这种数据模式,间写数据模式在这里面我们得要注意一个点,如果我们是客户端组成个间写数据数,嗯,数据处 数据模式这种数据,我们那时候我们在这里面我们要做训练化操作,如果说我们服务端要接收到我们这个数据,要做一个反训练化操作,在这里面我们就是一个肩写训练话,肩写反训练话, 当然我们现在这个课程讲这些东西的话就说比较 比较冷,就说时间上就是比较长,我们录这个时间的话是每一节课是是我们的二 二十到三十分钟,所以说我们在这里面一节课可能是讲不完的。好,我们为了建立连接,我们当我们客户端和服务端之间做一个交换数据的时候,我们说个点啊,我这个框架里面用了我们一个音频一个 引擎的点哦,这个是引擎点哦,引擎点哦,我们可以去把这个元旦码给我们下载下来, 这有个系统元代码,我们打开先先打开我们终端,我们二十下, 我们看一下我们这个,我们这个路径主要在哪里?主要在我们这是这里面,我们记住这是里面那个蛋板板块,蛋板板块我们把它 cd 到我们这个滤镜下, pw, 我们设置大一点 pwd, 在我们这样的一个路径下,到时候我们这个课程可以分享给大家,分享给大家的同时也可以把这个代码,这个代码给到大家。 我们在这里面,我们记得我们扣扣笼把我们这个 八秒, 这个就等他打开吗?我们就讲下面了,他在他是浏览 其中更为底层的一个接口,什么叫接口?就是底层洗的相关那个通道洗衣啊,洗了相关的一个接口,接口洗了之后我们上层应用去掉这个接口,掉这个方法,这在这里面称为接口。 我们那个引擎的一个啊,是服务于我们那个服务器的一个执行,我们引擎点啊 横杠这个客户端,可能这个是服务我们客户端那个执行,在这里面,这里面就是我们整个的一个流程图, 我们整个流程图我们说个点啊,哦,这里面有个读读写,在这里面有个科长,科长的话说个点,然后这有个按按不定的,你看这我们 我们从这里,从这个框架开始这个点,哦,这是用户信息,这是我们的这用户,这是我们的烧粉服务,这是我们那个客户端啊,在这里面我们去寻找,我们这是服务端,你看 这个,这个,嗯,比对下来,这是服务端,这是我们的客户端,就形成了我们客户端跟服务端之间那个连接。你看我们服务端给到我们服务端的地址,我们客户端是个用户去通过我们这样去剪些这个数据。 第二个我们就是走有两条路吧,一条路是这样的,一条路是这样的,我们在这里面我们看一下,看一下他这里面的 百度翻译在线,这是我们惊喜。这个是 wripcw 这个单词应该是包包裹, 在这里面一个是用户信息,一个是包裹,包裹的话我们客户端这个做做交换,做数据交换,在这里面就打扰了我们这个 引擎的点客户端引擎点客户端在这里面做剪歇,剪歇之后跟我们做活动,做我们这个 数据信息的一个交换,在这里面主主要是减息,做我们服务地址的一个配置,然后直接这是我们 这个操作。我们在这里面有一个服务端,他有个用户信息缩个点, app 的有个扩展,扩展的缩个缩个点,然后这个读读写信息这样一个图层,图层 那张图我们就讲到这里,讲到这里的话,我们现在这个这个博客要打开了, 打开之后我们就在我们这个地方用我们那个吉他靠拢去把我们这个地址,啊有有这样一 有这样的地址我们现在给他操作一下啊,对,我们网络状态还可以扩容到我们本地,本地我们查看一下,我们现在就由我们说好的点,然后这个 别打别的到我们售后点的啊,我们查看一下,你看查看一下就有我们相关那个代码。嗯, 这是编译拍出来的数据包,这是个实力,我们现在我们就可以用我们这个打开,我们这个是是我们欧巴迪 c 这个原版,我们现在打开新的去看一下, 打开文件,这个文件在在哪里打开呢?这在我们这个应该是文稿应视频基础,我们在这那个课程里面,我们在这在这里面去把我们这个打开,再打开的话我们就可以看了。 你看我们这这个是我们这个是力宝,力宝的话就是超市铺,你看力宝里面 一个简新微三,还有川式 pony 网络板块,网络板块我们看一下,这样他其实他底层他所依赖的就是我们的微博来收给他, 我把你说好的这个这是我们说好的点,然后他还是一一来,我们把他说好的这个结实,我们这这个地方就是一个案例实力,实力的话我们这 这,我们这是一个 开开启, 这就打开我们的浏览器,这是我们那个结实结实,这是我们按这个这样一个案例,这样一个案例我们会去去给大家做讲解,我们现在返回去,返回去我们讲一下我们说的啊,我这个工作原理, 工作原理我们在这在这里面我们看一下他主要是视力安利这个点啊,是主要是用于聊天的。嗯,聊天的一个 就是说我们这个可以做我们的一个实时通讯的一个聊天,也可以做我们那个视频通话,加我们聊天,我们都可以进入我们的收到点啊,我去做,去收到你的啊,让我们联想到我们的微博,收给他 可以联想到因为这个那个底层的话,他是就有一把收割机去做的。你就刚才我们看那个原码,那把收割机也是一种允许一个双向通信的一个浏览器的一个 有了有奶气端的一个实现,但是说个点啊,呦,不会用作用于 不会用题作为标准。首先十二点啊,我使用了我们这个叉 hr 这个破万的来创立我们一个连接,我们看到我们圆码, 我们不是 不是已经打开了吗? 看到我们的元宝,我们元宝,我们再这样我们看一下,主要看力宝,力宝里面,我们看这是说的啊,哦,这个也太死了,这是川式保安的 cc, 我们看一下, 你们看这里面他主要是有这个东西叫什么破案的间隙,破案的是点贴死,这,这是我们全是破案的,全是破案的,我们看这里面也是这个,到时候我们可以去进行一个分析, 这个元码分析的话我们后面会讲后,后面会对我们的微白手,微白收费的或者我们那个收费的点,然后元码分析进进行讲解,我们不讲的话我们去讲一下他们之间的一些基本的原点,后续讲元码分析 好了。然后我们看一下他是通过这个来创建一个常人的一个训的一个连接啊,一旦此建立连接之后,他会将身体到可用最佳的一个连接状态,我们在大多数的一个 情况下,我将引起了我们 vipanc 的一个连接,就是比斯 vipa cv 宝收费的一个连接 vipposit 的点 io, 这个实际的一个用途。我们讲一下我们 vipancopiticiov, 它是提供了一个双向通信的一个流行的一个方式, 一个是常见的一个常见的应用的话主要是聊天,聊天应用程序,在这里聊天应用程序有我们的一个发短信, 嗯,语音聊天,除此之外还有我们那个视频聊天,视频通话下文的话,我们主要是探讨一下他的一个用力,是程序的话主要使用我们套剂证 舒克的,舒克的主要就是我们有套节制来,当服务器接收到我们新的一个消息时候,他会将我们将其发送到我们客户端 的通知,他们从来不需要客户端与服务端之间发送这种请求。这种简单的一个聊天程序主要是收购的点啊,那个工作原理,现在我们主要是看我们收购点啊,那个工作原理。 我们这个别说我们是这个,就是微信欠应该是微信吧,我们欠应该我们的翻译就是申请 it, 应该是微信闲聊, 如果说我们闲聊的时候,我们就是客户端和客户单之间,我们首先我们客户端向我们这个服务器发送我们消息,我们消息我们服务器马上就把这个消息回给这个 客户端,嗯,同时我们也可以回回给我们这客户端二,客户端三,就是说我们只要我们和客户端一给我们服务器发送一条消息,我们,嗯,服务器可以把这个消息同时, 嗯反馈给我们客户端一,客户端二,客户端三,这就是我们说法的。哦,用于这种聊天,这种这种模型 服务器,嗯,这种聊天的这种工作原理,下面我们就看一下我们服务器, 福建,你如果说需要安装热的点接手,我们就可以用 x plus 来来简化讲解,来设置用于我们创建的一个新文件,你看 在这里面我们就把所有的案例给他倒进去,把它安装好,安装好之后我们在这这个地方啊,嗯,下十分钟,这这样我们用的是一个线脚本, 这个地方告诉我们用那个线脚本要设置服务器,并导入我们的一个少需要数据包的一个图文键,这个地方就是漏的结实,导入我们这个收割点。啊哦,这个相关的一个图文键就是最快 服务器的一个目录,这目录的话他们说作为我们英的爱的英代 htm。 好了,我们再做以下的一个设计程序,我们再这样,我们以下的一个设计程序主要设计三个地点,然后我们可以用于他来 负责监控,监听我们那个连接事件,并在监听到的同时并设置相关的功能。 这个是啊啊,我们好了,我们这节课我们就讲到这里,我们这个讲这个课程的话可能要要两两节课去讲。 嗯,感谢大家,大家的观看, 观看我那个视频教程。

第一种叫单向通讯啊,什么叫单向通讯?我们先做最简单的,什么单向通讯呢?服务器端发个消息,扣端能收到,这就叫单向的。那除了我们讲了单向之外,我们还会给大家讲讲双向,什么叫双向? 服气端向,扣端发送一个数据,扣端收到了,给夫妻一个回应,那夫妻也收到了,那这就代表一个什么?双向?同学,我们先看通单向的单向里边,首先第一个 服务器端的一个建立步骤,那分了大概五步。第一步建立服务器端的一个套接字,指定监控监听端口。那我们刚才说了, 服务器端专门有一个类叫 seventh ok 的,叫 seventh ok 的,他专门有这样一个类来处理服务器的套接字啊,要首先要建立这样的一个套接字,那什么叫建立呢?就是你有的过程,你有一个 seventhsok 的,对吧?第二个,监听, 监听这里边监听我们会用掉骚骚骚开的点 accept 啊,这个方法来干什么?来监听,并且我们可以自动的去接受链接,我不管你谁发的啊,我就监听着, 谁想跟我通讯, ok, 我就跟你连接啊,这是第二步。第三个在我们获取的这个骚客对象啊,当我们这个链接链接上了,他就会有骚客对象,我们通过骚客对象来获取他的一个输出流,注意输出流,什么叫输出流? 或者烧开的输出流?比如说从我们服务器端向扣端发送消息,那发送怎么发送消息?通过流的形式发送,通过流的形式, 从服务器端到客户端发送一个消息,我们通过流的形式,那我们先去获取这个载体,哪个载体?骚 k 的这个载体,这个载体里边有个输出流,先把这个流获取出来,然后对他进行一个 缓冲流的一个包装。为什么要用缓冲流包装啊?这个里边我们用的就应该是呃,八分的 rad 或者八分的 rat。 啊,这个我们在之前讲 io 的时候讲过啊,因为缓冲为什么用缓冲啊?他出去起来很方便,对吧?啊?包括他没有对于字母串处理 啊,对,这边处理我们用缓冲流速度是最快的,效率是比较高的。好,那第三步就是我们先从烧开袋里边来获取这个输出流啊,并且把这个输出流进行一个缓冲流的包装, 包装成我们的啊。缓冲流,那发包装之后我们可以干什么?向我们的客户端发送返回消息?比如说我们通过流向流里边写入数据,注意向流里边写入数据,那这个数据就跑到流里边,那这个流在哪?在骚客的上,那骚客在干什么?骚客在又发到了客户端, 那就说通过流里边写内容啊,通过流又在骚客的里边,那骚客的又到了我们客户端,通过这一系列的过程可以把我们写的内容啊,通过这种步骤, 然后传递到我们的什么客户端,那客户端怎么去读取?同样道理,一会我们再看客户端。那第五步,当我们这些资源都使用完了之后,一定要注意,我们得把我们刚才的 包装的缓冲流给他干什么?给他关闭第二个啊,第二什么?第二个烧开的链接,注意跟资源相关的那种,我们一定都要做什么都要做关闭操作。 好,那我们通过代码来给大家演示一下这五步应该怎么去做。好,我们先把这个服务器端的这个步骤啊,我们写到我们的程序里边,按照步骤我们一步 不来做。好,我们先来建一个叫骚 k 的这样一个包吧, pak, 好,在这里边我们先建一个叫色味吧,叫色味,色味,色味,少给 好, severso 给的好,我们点击这个好像要跟我们有个重重复了,我们叫骚味吧,叫骚味吧。 好,我们写个秘方法,在秘方法里边我们把我们刚才的步骤啊给他拿过来,那当然,我们先来做个注释。好,我们来看借力扶其他一次指定端口的坚定端口,那怎么做 啊?注意,我们刚才在课件里边找了一个什么,找了一个这样内容啊,我们刚才说了,有什么有个叫 seventh social, seventh seventy 这个类啊,我们先来创建这个 seventh society, 那我们就来写啊, seventh society。 好,他在哪个包下再加啊?点奈他包下啊,我们叫 seven, 我们叫 seven salky 的也可以啊, seven salky 的等于你有 seven salky 的。那注意这个 soky 在里边啊,我们可以给定什么? 给定几个参数呢?稍微稍给他啊,稍微稍给他,我们给定一个端口,也就说我们福气里边哪个端口给他使用,哪个端口给他使用。那我刚才其实在讲端口时候给大家说过,我们尽量从八千以后,那比如说我们找个特别吉利的数字,好,四个八 啊,四个八,这是我们第一个创建了一个这样的 sorry sorry 的对象啊,建立一个服务器,套一个字,那又报错了啊,注意报错不要紧啊,是因为我们可能会引发一个叫 lvices。 那怎么做?你出来看试,出来看试。 好,穿开之后我们第二步来干什么?第二步来干什么?第二步来监听,监听等待客户端的一个链接。监听怎么做啊?注意,监听怎么做? 点 accept, 注意这个 accept 就要接受链接,也就是说我们准备好了,服务器端好,我就等着, 等着谁等着干什么?等着接收一个骚 k 的这样的对象,那注意他的返回之一直是一个什么骚 k 的,那我们来做一个叫骚 k 的啊,骚 k 的,骚 k 的 等于我们十二点 accept 啊,等于我们服气端接收到的获取这个链接,并且拿到了 socia 的这个对象的。那我们第三步要做什么?对,我们第三步要获得这样的一个输出流, 并对这个理由做一个什么?做一个包装。那包装成什么?包装成什么?注意,包装什么?包装成。我们这里边来看啊,我们包装是什么? 包装成我们的 bufferwriter, 注意 bufferwriter, 是不是啊? bufferwright 是我们的什么写的这样流或者叫输出流,对吧? bufferwrighter 好, berrighter, 我们 bw 等于 new bufferwrightter 好,大外外套里边我们用一个这样的流包装什么流呢? new outfit stream。 new out, new out stream 啊,我找找,你有 autopstem writer writer。 好,这里边有个 autoputs autoputs some writer 的这样的一个 好 out 铺子。 stream, 那我们看他的参数啊,参特参数什么? output the skrim writer, 他的参数什么?他的构造方案的参数叫 output the stream, 奥特普斯人是哪个?其实就是我们刚才获取的骚 k 特点。点什么点? gets, outpost, 注意这个我,我们就可以获取到的他的一个什么输出流。那下边 那第三个我们就做完了输出,留好。第四个,向客户端发送一个内容,发送反馈消息。那怎么发送?注意,我们用留点什么? right 就可以啊。我们来写一个菊花,我们写一个字母串吧, 这是服务器发送的数据,你收到了吗? 好,这时候我们就可以做完了,对吧?那我们最后一步做什么?我们要做留的关闭,注意,留的关闭。怎么关?当我们有了这种穿 case 的时候,好,我们要考虑一个问题,什么问题?发动类的问题,比如说不管你有没有出错,那我最后都是要关什么的?第一个, 第一个 a 吧,关闭什么?关闭旅游啊?注意,关闭旅游。第二个是什么? 关闭烧开的好,关闭烧开的。那注意这个流 怎么关?注意,我们用 bw 点 clothes 是不是就可以好? c ose, 那这里边又遇到问题了。这个问题?什么问题?在我们讲 io 流的时候大家遇到过,我们发现这个八分 rad 啊,八分 rat 并不在踹到外边,那怎么办啊?我们把它声明到外边去。 好,顺便到外边去。我们给他一个定义啊,给他一个定义,那我们下边把这个定义的语法给他去掉,我们只剩一个副职的操作啊,那对于这里边又有问题?什么问题?哎,又是一个这样的问题啊,那当然, 我们在这里边可以看到,告诉我们需要做一个出水化,那做出水化好,做等于浪就可以,对吧?我们给他一个空值。好,这个应该就不会报错了。当然这里边会遇到一个什么问题啊? bw 他可能会出现 一个空置的异常,那空置异常怎么做?我们来加一个 f, 如果 bw 不等于那样的话,注意, bw 不等于那的话,我们直行 clothes 关闭,对吧?如果等于,那我就不做啊,那第二个我们来关闭。什么?关闭 social 啊?那关闭烧开的,关闭哪个? 对,我们就把刚才的烧开的关掉就可以,对吧?好,我们来看怎么去关闭?那我们用烧开吃 点 clos, 哦,也是 clos, 但是又有问题了。什么问题?这个骚 k 的又在哪?又在这里边,那怎么办?那我们把它继续提取出来,对吧? 那我同样的道理。什么叫同样道理啊?我现在学聪明了啊,我可能觉得啊,我觉得他可能在下边也会遇到一个空的问题。 好,那我怎么做来出来看齐一下啊?注意,我写了空的之后,那他就不会报错了,对吧?好,那我们来做,还是这样操作,如果,如果什么骚 case 不等于那样的话啊,大家有没有发现关于资源操作这块,其实套路是一样的,对吧?套路是一样的,没有太大区别啊。 好,这个是我们做的啊,这样的一个内容,当然这个内容我们只做了什么?我们只做了服气端的啊,服气端的。

作为前宇宙场的程序员面试官,你猜我在面试中问的最多的是啥? socket 到底是什么?看完这个视频,你不仅能搞清楚概念,还能弄明白 socket 的内核。实现故事要从一个插头说起, 当我将插头插入插座,那看起来就像是将两者连起来了,而插座的英文又叫 socket。 巧了,我们程序员搞网络编程时,也会用到一个叫 sock 的东西,其实两者非常相似,通过 sock, 我们可以与某台机子建立连接。如果我们想要在两端之间传份数据,就需要像上面这样, 两端各自执行 socket 方法。得到 fd 聚柄之后,对于服务端依次执行 bind、 lason、 accept 方法,然后坐等客户端的连接请求。执行 connect 方法,向服务端发起建立连接的请求。连接建立完成后,客户端可以执行 sand 方法发送消息,服务端可以执行 receive 方法接收消息。反过来,服务器也可以执行 send 发送消息,客户端执行 receive 接收消息。这就是我们大部分程序员最熟悉的使用场景。 现在我们见过也用过 socket 了,但对大部分程序员来说,他依然是个黑盒。那既然是黑盒,我们索性假设我们忘了 socket, 重新设计一个内核网络传输功能。网络传输从操作上来看,无非就是两段之间互相收发数据,也就是对应读数据和写数据。 写过代码的都知道,为了实现某些功能,我们一般会需要定一个新的数据结构,这个数据结构叫 sock。 由于接收端和发送端可能不止一个,因此我们加入 ip 和端口坐下区分 ip 用来定位是哪台电脑, 端口用来定位是这台电脑上的哪个进程。另外,发送端和接收端的传输方式有很多区别,可以是可靠的 tcp 协议,也可以是不可靠的 udp 协议,甚至还需要支持基于 icnp 协议的拼命令。虽然这些协议各不相同, 但还是有一些功能相似的地方,比如收发数据时的一些逻辑,完全可以附用按面相对象编程的思想,我们可以将不同的协议当成是不同的对象类或结构体,将公共的部分提取出来,通过继承的方式服用功能。 于是我们将功能重新划分下,定义了一些数据结构。 sock 是最基础的结构,维护一些任何协议都有可能会用到的收发数据缓冲区。 next sock 特指用了网络传输功能的 sock, 在 sock 的基础上还加入了 ttl、 ip、 地址、端口这些跟网络传输相关的自断信息。 说到这里大家就蒙了,难道还有不用网络传输的?有,比如 your next domain socket, 用于本机进程之间的通信,直接读写文件,不需要经过网络协议战。 net connection stop 是指面相连接的 stop, 在 next stop 的基础上加入面相连接的协议里相关自断,比如 accept 队列、数据包、分片大小、握手失败、重试次数等。 虽然我们现在提到面相连接的协议就是指 tcp, 但从设计上, lay next 需要支持扩展其他面相连接的新协议,比如 sctp 协议,不了解也没关系,我们跳过 tcp 下划线 sock 就是正儿八经的 tcp 协议专用的 sock 结构了。在 next connection sock 基础上,还加入了 tcp 特有的滑动窗口、拥塞避免等功能。好了,现在有了这套数据结构,每个数据结构实现自己职责范围内的功能,然后再将它们 硬件网卡对接一下,就实现了网络传输的功能。可以想象到这里面的代码肯定非常复杂,同时还操作了网卡硬件,需要比较高的操作系统权限,再考虑到性能和安全,于是决定将它放在操作系统内盒里。 既然跟远端服务端进程收发数据,可以抽象为读和写,操作文件也可以抽象为读和写。正好有句话叫 lay next 里一切皆是文件,那我们索性将内核的 sock 结构封装成文件就好了。 创建 soc 的同时也创建一个文件,文件有个具柄 fd, 说白了就是个文件系统里的身份证号码,通过他可以唯一确定是哪个 soc。 将 fd 聚柄暴露给用户之后,用户操作这个聚柄文件,系统就会将操作指向内和 sock 结构。有了 socksd 聚柄之后,我们将这部分功能抽象成一个个简单的 api 接口,让用户 更方便的实现特定的网络编唱功能。以后别人只需要调用这些 api 接口,就可以驱动我们写好的这一大堆复杂的数据结构去发送数据。这些 api 接口我们列了一下,发现需要有 send、 receive, bind、 listen、 connect 这些。到这里, 我们的内核网络传输功能就算设计完成了。现在是不是眼熟了,上面这些接口方法其实就是 socket 提供出来的接口,所以说 socket 其实就是个代码库或接口层,它介于内核和应用程序之间,提供了一些高度封装过的接口,让我们去使用内核网络的传输功能。到这里 我们应该明白了,我们平时写的应用程序的代码里,虽然用了 socket 实现了收发数据包的功能,但其实真正执行网络通信功能的不是应用程序,而是 linex。 内核相当于应用程序通过 sock 提供的接口,将网络传输的这部分工作外包给了 linx 内核。这听起来像不像我们最熟悉的前后端分离的服务架构?虽然这么说不太严谨,但看上去 linx 就像是被分成了应用程序和内核两个服务 内核,就像是后端暴露了好多个 api 接口,其中一类就是 soccer, the sand 和 receive 这些方法。应用程序就像是前端负责调用内核提供的接口来实现想要的功能。 看到这里,我担心大家会有点混乱,来做个小的总结。在操作系统内和空间里实现网络传输功能的结构是 suck, 基于不同的协议和应用场景,会被泛化为各种类型的 suck, 他们结合硬件共同实现了网络传输功能。 为了将这部分功能暴露给用户空间的应用程序使用,于是引入了 sak 层,同时将 sak 嵌入到文件系统的框架里。 sock 就变成了一个特殊的文件,用户就可以在用户空间使用文件具柄,也就是 socketfd 来操作内和 salt 的网络传输能力。这个 socketfd 是一个 into 类型的数字,现在回去看 socket 的中文翻译套接字,我将它理解为一套用于连接的数字,是不是就觉得特别合理了? 上面关于 socket 怎么实现网络通信功能这一块一笔带过了,现在我们来聊聊。我们以最常用的 tcp 协议为例,简单了解下它是怎么实现网络传输功能的。 我将它分为两阶段,分别是建立连接和数据传输。在客户端代码执行 socket 提供的 connect 方法,传入 socket 和 ip 端口时, 内核会通过 socksd 句柄找到对应的文件,再根据文件里的信息找到内核的 sock 结构,通过这个 sock 结构主动发起三次握手,至此连接就算准。 准备好了之后就可以开始传输数据了。为了实现发送和接收数据的功能, suck 结构题里带了一个发送缓冲区和一个接收缓冲区。说是缓冲区,但其实就是个链表,上面挂着一个个准备要发送或接收的数据。 当应用执行 send 方法发送数据时,同样也会通过 sockfd 句柄找到对应的文件。根据文件指向的 soft 结构,找到这个 soft 结构里带的发送缓冲区。将数据放到发送缓冲区,然后结束流程内核,看心情决定什么时候将这份数据发送出去。 接收数据流程也类似,当数据送到 linax 内核后,数据不是立马给到应用程序的,而是先放在接收缓冲。剧中数据静静躺着,卑微的等待应用程序什么时候执行。 receive 方法来拿一下,就像我的视频,躺在你的推流列表里,卑微的等一个点赞、关注、转 转发三连。看到这里,问题又来了,服务端类似的时候,那么多数据包发到一个类似 socket 上,服务端是怎么区分多个客户端的?客户端发来的数据包上会有原 ip 地址和端口,以及目的 ip 地址和端口这四个元素构成一个四元组,可以用于唯一标记一个客户端。 服务端会创建一个新的内核 sock, 并用四元组声成一个 hasht, 将它放入到一个 hash 表中。下次再有消息进来的时候,通过消息自带的四元组声成 hasht, 再到这个 hash 表里重新取出对应的 sock 就好了。 所以说服务端是通过四元组来区分多个客户端的。最后遗留一个问题,大家都知道 linx 内核是新语言实现的,而新语言既没有累也没有继承的特性,是怎么做到继承的效果的呢?欢迎评论区讨论。想要文字版的笔记,可到我的报上 回复关键字扫即可获取!老规矩,总结的事情就交给你们了!

其实我们在实际的开发当中呢,我们不太会去使用这个原声的 a p i, 其实原声 a p i 里面呢,功能是绝对齐全的,大家可以去看这个 m d n 的文档,这里边有完整的就是它里边的用法啊,一些属性啊,方法其实也不多啊,也不多,但它功能肯定是齐全的,但为什么我们平时不太呃喜欢使用这个原声的 a p i 呢? 原声的接口呢,虽然简单,但是呢在实际应用中啊,会造成很多的麻烦。什么麻烦呢?比方说哈,我们现在考虑一个聊天场景这个页面呢,他有聊天,有实时聊天,同时呢也有开线, 于是呢,可能我们服务器啊,当然客户端那边也可能不断的发送消息给服务器,服务器呢,那边呢,也可能有不同,不停的有新消息过来,那么他的消息呢,比方说发了这么一些内容,你看一下,你能看懂他啥意思吗?这些内容全部全部在哪里接收,所以全部在 unic 里边接收,对吧?这里所有的消息都在这里统一接收,那这个接收消息到底是什么消息,你分不 清楚啊?那么这个数据就会造成这样的一个问题,连接双方可以在任何时候任发送任何的数据类型数据,另一方呢,必须要清楚这个数据到底是什么东西,对吧?那么福气可能可能给我发的是聊天啊,聊天的时候有哪些,聊天室里面有哪些人,对吧?然后呢,也有可能发的是一一个用户的发布的一个新的聊天内容, 也有可能呢发布的是呃,那个 k 线的最新价格,也有可能呢,有人离开了那个聊天室,那么他会把个聊天室里面的人重新更新,更新之后呢,再重新发给我们,就你分不清楚, 那么回忆一下啊,像如果说我们以前学的 atp, 那么 atp 是如何来解决这个问题的? atp 解决,解决这个问题的话是不是非常简单?怎么解决?是通过 pass 解决,你请求不同的路径,那么就表示你要不同的东西,对吧?这里是登录把,这里是获得新闻列表,通过路径来进行区分,但是很严 遗憾的是脱离了 attp 协议了,现在他没有路径了。哪有路径?他这个东西你看一下我们这里,那村口这里哪有什么路径啊?一旦握手完成之后就是全是这种消息了,哪有什么路径呢?什么头啊?那些东西全部没了啊,只有握手阶段在用 attp 协议的时候才有一个头,握手完成之后的消息再也没有什么头啊。题啊,这些东西都没有了, 那我如何来区分呢?朋友们可以想想办法啊。其实这个办法呢还是挺好想的,最简单的办法就是使用一些第三方库来帮我们解决这个问题。这个第三方库是什么呢? socket i o 啊,这是一个非常有名的微博收费者的第三方库,他是这样处理的啊,把不同的消息呢放到不同的事件里边。他这个事件呢,有哪些事件你需要自行约定?服务器跟客户端之间需要自行约定,他通过监听和触发事件来实现对不同消息的处理。什么意思?我现在下面一张图啊,比方说客户端这边他监听了三个事件, 那么我们这里比方说客户端和服务器之间约定了,我们一共有三个时间,一个是成员更新,就聊天室里边有哪些人啊?然后呢?是监听聊天消息,有没有新的聊天消息过来,然后呢监听最新的价格,贴心的最新价格,约定了有这么三个时间,客户端这边负责什么?负责监听 好服务器那边呢?就负责触发事件。触发事件什么意思?就是发送消息的时候呢?顺带我告诉你这个消息是哪个事件的, 那么比方说这个消息他就告诉你,哎,看这个颜色啊,我就告诉你这是一个成员共情世界,于是这个消息发到客户端那边,客户端那边就会触发这个事件的处理。客户端那边他写的代码呢?尾代码啊,可能是这个样子,也说服务器在触发时间,客户端在监听时间啊,服务器触发事件本质上就是发一个消息过来,附带一个事件类型, 那么他就会触发到这个事件,这个事件就会运行这个函数,对吧?然后第二次发了一个,你好,这是一个聊天消息事件,他就会触发这个函数。而第三次呢, 发了一个最新价格,他就会触发这个。第四次呢,发送那个又是一个成员更新,他又会触发成员更新这个,这个函数啊,他是这么一种逻辑,那是不是所有的事件都是客户端监听服务器触发呢?不是的,完全有可能,非常非常有可能服客户端那边也会发消息给服务器,对吧?那么客户端发消息给服务器,那就是客户端触发事件, 服务器又在监听客户端的时间,对吧?这双方他们地位是一样的,不存在说谁高一点,谁低一点,地位完全是一样的。所以说我们在一个微博 socket 的典型场景里边啊,像这种 socket io 的典型场景里边, 任何一方都有可能既监听事件,监听对方的事件,也会自己触发事件,自己发送消息。监听就是收,触发就是发啊,你理解清楚这个东西就行了。那么这样子做了过后呢,这个模型就比较完善了啊,我们就可以利用这种事件的机制,对不同的消息进行不同的处理,那么这个事件是 首要客户端和服务器双方事先约定好,那么这里呢,我们看看一下我们的聊天室接口,握手完成之后呢,他就靠事件啊,事件,你看这里有这么一些事件,需要在接口文档里边,或者是双方私下把他事件约定好。 sopetio 啊,就就这么一个第三方库,他就是实现这么一个效果,他为了实现这些要求呢,他对消息的格式啊,进行了特殊的处理, 他的格式呢,可能跟大家想象的不是一个普通的对象那么简单啊,他做了一些特殊的处理,那我说这一点是什么意思呢?就是如果说你服务器使用了 sokisio 这个库来进行触发事件发送消息,你客户端那边也必须使用这个库 啊。同样道理,你客户端那边是用 socket i o 来发送消息,服务器也必须使用 socket i o 啊,不能,不能说服务器用这个客户端就用这个,理论上是可以的啊,因为我 socket i o 本质上也就在调用这个,这个 a p i 理论上是可以的,但是这个就很麻烦了,因为 你要理解为手机 io 的他那个消息格式,那个很复杂的消息格式是怎么组成的啊,就有点分析就更麻烦了,所以说要用的话就双方一起使用,使用这个手机的 io 其实是非常简单的啊。这里呢,我先给大家说一下手机的 io 的一些注意的事项。使用的时候呢,我们要自行的约定事件,那么肯定要给事件取名字,但是有一些名字呢,你不能取, 有一些名字他是已经定义好的,叫做 message 啊,让 conte 这种名字有些特殊的名字啊,比方说这个 message 呢,就表示他对应到这个 websoke 里边的这种 message 啊,所以说有些事件名字呢是不能用的, 那我们在取事件的名字的时候呢,我们一般来说会加一个前缀,或者是你这个工程的名字啊,或者是怎么样,那我这里呢,比方说加一个多乱符号,这样子,避免跟那些预先定义好的事件名字发生冲突。把这个地方我给大家说一下。另外个地方大家了解一下, socket io 啊,功能非常强大呃,它不仅支持 服务器,还支持客户端,都支持啊,同时呢,他还对一版本的浏览器进行了兼容处理,就是如果说他发现这个版本,你这个浏览器版本太老了,比方说现在什么 i 浏览器,对吧?像版本太老的浏览器呢,如果说你不支持,我也不 socket, 那怎么办呢?他会转而使用长文询, 整个的那个 a p i 都是一样的,就是你不用改带嘛,他会转而使在内部,转而使用长轮循,他会有判断的啊。 然后手机的 io 还有很多的高级功能可以参与官方文章啊,我们这节课就不愁了,关注都已剪辑号的同学打断一下啊,我是袁老师,总听我讲短视频,这回呢,来听听我讲的大课。 我给大伙呢专门录制了一套大吃课,现在呢,免费送给你们,不管你手上现在看的是什么样的资料,都应该先停下来,先来看一看我这套大吃课。一方面呢,这套课程里边的内容都是前端最核心的 知识,其他的知识都是在这个基础上生长出来的,你先掌握好了这个,再学啥都事半功倍。而且呢,自此以后,你对前端技术的理解不会存在任何的障碍。 另一方面呢,这套课还能够提升你的眼光,让你具备分辨好坏的能力。看过大师课之后啊,有一些不入流的资料,课程 博客论坛你就看不上眼了,这种能分辨好坏的能力,也能够为你将来的学习省下不少的时间。所以呢,还没有领到课程的同学,赶快抓住免费领取的机会,进评论区第一条,加入粉丝群,然后根据提示领取就可以了。

大家好,今天给大家分享 websake 在项目中实现计时通信的效果。首先进入 websake 提来 编写 website 配字位,将服务端交由 shrine 管理。让我们一起看下具体代码的实现。 这里我用 website 通讯测试一下,看看实现效果吧。