00:00
学这个技术都没问题,你只要拿时间去学都能学会,这不是什么高大上的,而且都是常识性问题,但是呢,你要学会的一种能力,就是说怎么去分析将来你才能找到优化点,说老些同学,我就程序为什么不知道优化,根本不知道这个程序怎么运作的基本原理都不知道你怎么优化,好多同学做了一个优化的时候,他跑去优化了一个带宽,怎么优化都跑不起来。跑去优化了一个数据库,MYSQL加了好多这个读写,读写分离,加了好多这个服务器的那个也优化不出来,结果发现问题在什么地方,是磁盘变慢了。你都没有分析问题出来,因为那个哥们在上传图片头像的时候,他把头像没有分目录存放,整个放到一个目录下面去,结果卡在哪呢?卡在了,当一个人一个人注册或者登录的时候,他去获取头像的时候,直接在那个读盘时候卡死了,他没分析出来。所以说你你就像一个医生一样,那个医生好的医生他会在干什么呢?他他先给你聊聊一下你这个这这个到底什么问题是吧,你的牙疼,你的牙疼可能不是你牙出了问题,可能是胃出了问题,对吧,他就好的,就是要去找问题,你们将来给程序优化,就好像一个医生给这个程序看病一样啊,你就记住老师这句话,那现在呢,我们有了这个基础,那下面就easy到啊,太easy了,找到我们的client写东西,名字都已经写好了,还有什么犹豫吗?这个就跟小写写写文章一样,玩似的,对不对,就玩呗。
01:23
那同样道理嘛,我刚才已经分析出来它是个actor,那就写act呗,写actor OK,没有问题,Actor,那我同样的道理,我先把这两个引进去。好,同学们,这个地方apply方法。把这个方法呢,咱们也把它写重写一把,好给它来一个receive对不对,没毛病啊,写完以后我们这边来一个主程啊,主程序啊就是入口就是入口,它这边也有入口嘛,啊肯定有入口嘛,那现在呢,我就开始写了class啊,这不class啊object简单一点,名字给他取一样。好,再说一遍啊,这两个名字不一样,没有任何关系啊,这两个程序没有,这纯粹就是为了程序一个入口。
02:07
啊,目前来说就是这样子的,那么同样道理,我已继承APP。我也只想APP思路来了。根据刚才老师的分析,仍然要创建这个ASTEM和他的这个客户,好的朋友们,首先前面这段代码其实是一样的,就是这段代码是一样的,大家看。就是它前面创建这个host port跟我们这个服务器端是一样的。但是他不一样的地方呢,它要多一样东西,他要知道获取到服务器的地址,所以这段代码一个模板呢,我也不去写了,这段模板呢,我用一下,其实就跟刚才很像,好,这段代码我拿过来用一下。这个代码呢,一其实就是刚才服务器端代码的一个,呃,一一样一样东西,我们来看一下,大家看这段代码能不能看懂啊好,这个地方我host port server host和server port说完了。
03:06
那这边我分别负责值,这边我们用的是个这个变量的模式匹配,这个127.0.0给了谁呢?这个127.00给了这个host,这个9990给的是port。就代表客户端的服务器端的hot和服务器端port,那么这件事对应,那为了好看,我干脆这样子啊,为了让大家看的更清楚,我把这个名字改一下吧,大家可能会容易这看不太懂。Client。Poch。好,这个就说完了,那同样把这个呢也引进去,引进去过后呢,这边我改一下,这边改成这个C兰兰port和这个。和这个什么呢,克兰这个。Port,好,这地方有有一个地方我要我多说一句话啊,同学们可能对这个strip margin不知道什么意思,我这我这简单的大家说一下这个strip啊,Margin是什么意思,那这样子啊,最简单方法就给你们运行一下,这这什么意思呢?它其实可以默认按照你给定的一个这个标志符进行分割,那么我为了讲这个东西呢,我给他做一个简单的一个测试。
04:13
好,这个时候呢,我我我一般会有这样一个习惯,就是写一个项目的时候呢,我写我会写一个test的一个文件,为什么呢?因为有时候我会哪个地方看不懂,我就写一段文件来证明一下我的观点,好你看我这样写。好的,那这样写呢,为了看到这个效果呢,我就这样子啊,这个因为我自己,我现在研究的就是这个stream marin,所以最好的方式怎怎么来玩呢,就这样写的。就特别简单的一种测试方法啊,我直接print。我直接print这个大家看到没有,好print过后呢,呃,其实这里面这两个变量我没有用到,所以说这两个变量我可以拿掉。我可以拿掉,好,首先呢,我先把这个STEM margin去掉,我看它是一个什么样的效果。然后我把它加上,这样一比较,你就知道他是干什么的,因为你将来工作时候时间很重要,你也没有必要在网上去查,你在网上去查这个方法你查不到,查了好久一句话都没说,对,不知道他是说什么说,干脆自己试。
05:13
好,你看我给他试一下,大家看一下这个刚才那个STEM margin是干什么的,首先我这样直接输出。各位同学请看。好,直接输入页面代码有问题,是哪里写错了?哦,对,我这没写是吧,好同学们,这样子我先暂时的将其注销。好,暂时进去注销,这个也没问题啊,好,我们再来运行一段代码走跑一下打消。把stream margin给他说一下,那个地方不写会出大问题啊,后面是连不上的,好,同学们看,当我不写的时候,它其实是把这个斜杠带你的原封不动的给输出了,当然他也做了替换,那现在呢,我加上这一个strip。啊。所str所Mar把这个加居加居大家看它做了隐私转换,那么隐私转换我们来看看加了过又变成什么东西呢?走一个OK,请看这里代码就减析了哦,变成这个就行了,首先他把这个拿掉了。
06:07
啊,把这个空格进行给去掉,所以说白了他就把边界全部给你清掉,对默认它是按这个来进行分割的,当然有些同学呢,也看到它后面可以带。带这个它分割的一个标准是什么啊,比如说contents,它可以进行这个分割,比如说我按什么来分割,这个是也是可以的,直接带带一个值啊好,这个呢,大家呃知道就可以了,就是我后面可以指定按什么分割,带一个参数,比如带一个参数。对吧,这样子写,比如这样子我加一个这样的东西,对吧,比如说如果我这样写的话,就代表什么呢?我是按照这个井号来分割,以后大家看到这个就知道什么意思了啊,就是这个这个意思好默认呢,删了个斜杠,好就不写这个东西了。好,知道这个东西就O了,那现在呢,我们回头继续找到我们刚才写的这个端,好刚才说了一点这个这个细节的问题,好有了它过后呢,简单了,那我们仍然先去创建我们的这个。
07:06
The system。创建actor system没问题,Very easy啊,那就是actor system。Actor systema sy好,然后呢,我们这边也给它取个名字,比如说这个我们叫client,然后呢,把这个confi带进去,好,这个就拿到了我们这边的的a system,好,现在呢,我们马上诶这个也不要了啊。下面这个事儿比较麻烦了。下面这个事儿比较麻烦了,下面我们要创建什么呢?我们要创建这个打开箱。我们要去创建这个customer actor的一个引用。他的一个这个这个这个这个实力实力和引用这个问题就比较麻烦了。引引用啊,那是为什么麻烦了呢?因为这个你必须得想办法,就是刚才我分析的,必须想办法要持有这个yellow checking server actor的引用。
08:12
这个地方你拿不到,你没办法把消息发给别人。那怎么拿到这个东西呢?好的,同学们,新的知识点就来了,显然我们这边要使用构建对象的六对象的方式来解决这个问题,好,那怎么做呢?大家都知道啊,首先我要问大家一个问题,同学们将来这个引用。就是我我说的这个yellow checking server actor这个引用,你们觉得他将来应该是在哪个位置?是不是他应该在这个action里面。因为你不在这个APP里面,你你发不了东西嘛,肯定是在这儿,所以你你得在这里面先搞搞一个,不管他怎么来的,你先写一个,所以这边肯定要定义一个。好,同学们,这边我们先定义一个。定义一个什么呢?我们先来定义一个,这个就是yellow。
09:04
Yellow。Yellow这个checking这个是一个关键点啊,Checking这个server server的一个引用。那么这地方怎么拿到一个引用呢?同学们看我写写这个东西了,他是这样写的,VAR,假设我们写VAR也可以用VAR或者VL都可以,那么我先写个VR,我写一个VAR,我做一件什么事情呢?同学们,我在这里先写一个叫server。Server的一个refer。就代表这个小黄鸡。啊,我取个叫server引用它的类型,它的类型不能叫actor,它的类型叫actor。啊,这个select select select这个类型。好,先给他一个默认。那么这个意思,这个server actor呢,就是将来我们要去初始化的一个yellow checking server这个东西,那问题了,怎么完成一个初始化的任务呢?
10:07
好的,同学们,这点关键要来了啊。首先。我们先给大家介绍一个方法,在这个里面呢,有一个方法。在这个ICU中。有,有一个方法叫做playar。这个方法,这个方法是在我们发第一个消息的时候,就在你整个这个艾克。装载内存进行run的时候,它会被触发的一个方法。有点类似于同学们学习这个Java的时候。Java的时候,它那个构造器是首先执行的,就是你再调一个,你再调一个实例的一个对方向时,构造器首先会会首先已经被执行过了,好这个呢,就是这个艾有个方法叫pre star方法,他会叫什么呢?他会。注意听对吧,它会在我们这个艾运行啊运行前执行,那么这个方法呢,我们就在这儿可以完成一些初始化的任务,在开发中,在阿阿卡的开发中,开发中我们经常,我们通常啊通常将初始化的工作,初始化的这个工作放在放在哪里呢?这个方法中叫pray。
11:28
诶,写了这么多啊,放在这个P。这个P啊p re,这个大这个方法中好,那么有这个方法过后呢,我就来重写它一下,叫DEF啊,Pre pred,我们找一下啊。好,这个DEF。DF,好,就就这个,就这玩意儿。就这玩意儿好,这个方法里边呢,我们在这里面写上一句话,这里初始化,怎么初始化呢?我要给他完成一个初始化工作。
12:03
那么怎么现在怎么拿到它呢?其中有一个方法叫context点。点什么呢?它这边有个actor,这个S,这里面大家看清楚了,可以传入一个act的一个pass及它的那个ICU的URL,就好像同学们在学那个Java意义的时候,我们要去请求一个图片,大家还记不记得你们在。在这个浏览器里面,比如说同学们注意听啊,这虽然简单,但是我还是要聊,聊两句,同学们请看啊,比如说我们通过这个网络。我们通过这个网络百度点com,我们要去请求这么一个图片,这个图片本身它是有一个地址的,就这个图片本身地址其实就是它的URL,比如说我复制这个地址。大家看一下这个例子是张什么德行?这个理解这个艾这方是一个关键点,就只要这个理解了就好办了,看这个就这怎么这样子的。
13:06
啊,那我不知道,他他可能做了加密,那我假设请求的时候,我这样请求,看看图片能不能回来。那这还不行,他这个一般现在有些程序做的,我我看一个看一个别的啊。有有些程序它没有这么,呃严谨,我们找一下这个这这个哦,找一个这个啊请求一个这个这个例子,看这个例址,它应该不会加密吧,复制这个连接地址,图片另址,诶复制我刚才应该点错了,应该是复制地地图片地址啊刚才复制图片你看这个就是他的一个没有加密的,那如果说我现在要去请只请求这个图片,我一回车就返回一个图片了,知道这意思吧。就好像我们去找这个actor,那么你X你看它这个前期是协议。这是协议后面是它的这个主机名,那么我们在请求这个挨的时候呢,这边就相当于是你的IP地址后面应该有个端口,这个端口默认480。
14:06
但是我们那个艾呢,就默认是999啊,不是默认就是999后面是它的在你这个艾,就是那个远程的那个服务近的那个X system里面的一个东西。待会你们一下就看清了,后面还要带个UR,带上那个名字就搞定了,好这个你看这个地址形式这样的,那么现在呢,同学们要给他聊的就是我们这帮怎么去找到。这个。Yellow checking actor,这个它的一个pass路径呢,非常的简单,同学们看到其实就是这样子的,来同学们刚才给大家运行了一下,大家应该还有点印象,来我在刚才运行的时候。这个还没有死,你们有没有看到他的地址,其实就是这个。也就是说我们把这个粘贴过来就可以了。粘贴过来就可以了,那就说点什么呢,就是actor。
15:04
把这个整个粘进去。那么粘进去有一个问题,同学们可以看到啊,这里虽然粘进去了,这个地方同学们看。这个就有点儿类似于这个server,不是乱写的啊,同学们。这个server就是你在先前。这个黄小黄鸡的这地方取的名字一般一般这个书上都没有说这么仔细,所以说很多人不理解是这个名字。就这个地方写的是什么名字,你这个地方就要写什么名字。那同学们肯定去试,如果你把这个名字换了,你换成这个,那么他打出的一个地址。这边打出的地址就会变成阿卡TCP server1。好,这个大法。把它突破好好了好了,这个有了这个IP地址呢,和这个端口是我们这边指定的,指定的,那也就是说我们是从这边给他设置过去的,那这个时候我要把它传进去,怎么传进去呢?好办,咱们用构造器搞定。
16:06
这边我接收一个server host,同样它是一个字符串。另外一个呢,它有它的一个server的一个端口。好,Server的server的一个端口,大家看到是个。那么我把这两个信息怎么办呢?我把这两个。给它装在这个地方去。啊,给他写到这里去。好向这同样把999呢,给它换成这个server port。没问题,Server POS好搞定,但是这样还没有写完。这样还没写完,为什么呢?因为你想想你这你你你这干了什么事,你不就是相当于找到这个server的一个地址了吗。可是你要明白一件事情,你要明白事情将来在这个服务器,服务器它整个是一个什么,它是一个I system。
17:03
它里边可能有很多actor。不仅仅只有你这个小黄鸡,因为你将来一个一个组成里面可能有很多很多挨个人都在都在玩啊。那你这样子,你只找到这个服务器,你没有找到这个小黄鸡的这个server,你是不行的,就好像同学们刚才看这个图片,如果我把这两个拿掉。我把这两个拿到,其实你只找到了一个主站。当你把这个信息写进去,也就是刚才同学们看到的这个image。点刚才我忘了名字叫什么了啊,反正就是那个意思啊,然后好像是logo吧,好像是logo。Logo点偏激,好,这样子呢。那这个名字可能他他他没写错了,好像啊,这名字再重新粘过来,是啊,它是JPG啊勾PG好这样呢,他就。你看这个这个这个网站还是有点问题哈,只要这个地址写错了,他他没有这个111个处理好。
18:00
好,这样子就找到了,这相当于这个还有一个路径的问题,那怎么办呢?非常的简单,这有规定的写法,写上user。写上U点斜杠。这个UR就是它的一个路径。那么直子哥,你要填的是什么呢?是小黄鸡server的这个名称。这个刚才我们写的yellow,不要写错了,写错你会死的很难看,就是你连不上,而且你很难找错误。但是这个地方呢,按理说也应该传进来啊,后面我们把它做灵活一点,好,到此为止,同学们,我们最核心的问题就解决了,什么问题呢?就是同学们看现在我们就拿到了他的引用,这是最关键的,虽然代码很简单,但是我讲清楚了,这边我再后面我再多说一下,接来看这个路径是怎么来的,我一步一步给大家说出,说清楚了就是阿卡前期是他的一个协议,这个网络通讯协议,这个是我们那个服务器的那个艾system名称,这个是他的。就是它的主机和它的port,这个是他的找到我们这个远程主机的哪一个act。
19:03
将来你不要搞错了,好,有了这个东西,那就太easy了,太easy了,那现在呢,我们来玩一下。走,我先写一个适当。好,我写一句话啊,我说什么呢?客户端客户端star star。客户端,客户端运行了,运行了,然后呢,可以咨询问题,可以咨询问题。咨询问题。好的,那有了这个咨询问题过后,下一步咱们就很简单,来,我们先启动一下。走一个,现在我们因为刚才这个还没创建起来,马上创建一个艾,这个引用太easy了。可是什么点,我们的这个actor of,那prop prop里面就是用六的方式了,六什么呢?六我们一个这个customer actor看清楚了,里面传入server pot和server。
20:03
Server host和再取个名字,就说你这个actor也得有个名字,那这个名字呢,咱们就直接叫custom actor就完事了。啊,将来多个你要要处理一下,好,现在我们来引一下这个包包,对引包这是第一个,然后呢,点VAR好,再给大家一个名字吧,叫customer好,这个私有的我先暂时去掉,暂时去掉,紧接着我启动它一下。啊,干什么呢,我现在呢,启动启动我们这个卡斯特曼。Customer refer啊,你也可以理解成就是启动这个,也可以理解成就是启动这个X啊,也可以理解也。也可以理解,启动什么呢?启动这个actor。好,现在简单的简单了,Customer,我发一个消息叫star完事了。那运行一下,我们先看看这个启动有没有,包括我们这个创建有没有成功,注意听大家看我为了证明这个先被执行,我先在这打一句话。
21:04
我打句话啊,就是presar已经被调用。这个是交给框架来完成的。执行的,那么我们来证明这个地址有没有拿到,怎么办呢?最好把它输出来一下,如果它是一个空,说明我们这个地址就没有拿到。这样我们就代码就写错了,尤其是你们第一次写啊,你们看老师写的很很很好像很熟练的样子啊,你要自己去写,你很第一次一般来说就很难通过,不是这错就是那错误,而且有些错误一旦发生很难调。啊,有时候我我曾经写过一次,写完了过后我怎么找都找不到错误,最后没办法怎么推翻,自己重写一遍,正确了还是不知道前面是怎么错的,因为他一个字符错了就就会很麻烦,网络这种字符错误很难排除,所以大家写代码要一定要小心,好这样子啊,我们来玩一把,看看能否成功,这样子我把这个都停掉,我们整体的跑一下。先把这块打通好,打通我们在一块先休息一会啊,那这样子我们先看看整条这个线,第一个客户端服务器端有没有启动,我们的这个就是服务器上那个I refer有没有拿到就OK,这个是核心点,后面代码就简单了,那朋友们先启动我们这个小黄鸡。
22:16
好,跑起来。小黄鸡跑起来过后呢,我们发现是没有任何问题的,他说小黄鸡开始功夫了,找到我们这个customer actor,那么这边呢,我们只是现在先启动他一下啊,然后我们来走一把。看代码。看见吗?有没有问题。好,当我们运行过后呢,看首先pre star已经执行,而且这个地址他看是完全OK的。这个例址你看这这这这个地址是完全OK的,说明我们这方是没没有任何,你看人家直接把这个地方给你做了处理了,说是这个地方的哪一个act,然后说师大客户端运行可以咨询问题,好同学们,这个只要到这儿,下一步就easy,好截取一段视频。
我来说两句