00:00
刚才呢,我们已然把这个这块写完了,就是主创程序,呃,主程序把它的创建act顶用来拿到了启动,现在呢,我们就做一件事情干什么呢?可以发消息,那大家已经拿到这个信息过后,下一步呢,我们这儿可以开始写一个循环,就在这里啊,就是开始可以就是客户端可以发送消息给什么呢?服务器,那你现在要发消息,我们这就我做的稍微死一点啊,我就直接写个处,那当然同学们可以加一些信息在里面,我就假如是让他不停的输东西。直到它输入一个关键字,比如说他不玩了,退出也可以,那么我这就做一个循环,那循环我干什么呢?我提示他一句话,请输入你要咨询的问题。PT,我写一句话叫做请,请输入你要要要咨询的问题。那么这个时候呢,我肯定会得到他输的一个消息,比如说std。
01:06
In,然后呢,我read na拿到过后,有一个问题来了,同学们,我们把这个发送消息的任务呢,交给他的refer这边去做啊,交给他这边去做比较合理,因此呢,我这里就做这样一个事情,干什么呢?我customer走,我把这个消息发出去。诶,我问大家一个问题,此时此刻customer I refer走了,这个消息过后,实际上把这个消息是不是发送到了这个receive这个方法来对吧?好,现在呢,我们要匹配,如果我们接收到了这样一个东西,什么呢?MESSAGE4个是寸类型的。好,当我们接受这个东西,我们就知道有人发了一个周串过来。那这个时候我们应该怎么办呢?这时我们就把这个消息转发给,就是真正发给我们的服务器端发给。
02:04
发给什么呢?发发给服务器啊,就是小黄鸡客服。小黄鸡客服。客服客服人员。啊,那这个时候你你发的很简单,因为你现在已经持有了。持有了这个server的refer,那这个就变得比较清晰了,就直接发出去,但是我们能这样发吗?我们不能这样放。啊,不能这样发,这样发呢肯定是不好的,因为首先你这是一个字符串。我们在发送的时候一般会以对象的形式,而且是以。这个序列化的。对方才能更好的得到我们信息,而且你一个字符串没有序列化,这个发出去意义不大,所以说我们要把它做成一个对象,我们才能区分,不然的话,你将来这是个周算,那假设我们将来还有一一个新的形式,你怎么区分呢?
03:02
没法区分,所以说这个支付算发出去呢,太low了,我们怎么办呢?我们这样写一个协议,就是这个协议就出来了,以后你们做这个工作做的很多,那现在呢,我在common里面新建一个文件。我们把它取名叫message,注意听啊,Message protocol protocol呢就是协议的意思,我写到这里来,小这里来呢,我我直接用样例类来做,使用样例类。样例类来构建。构建什么呢?协议。那目前对我来说至少有两个协议。一个是。一一个就是我们的这个客客户端,客户端发送发给服务器端的协议。对吧,协议,那么我把把它做成一个对象,以对象的形式发过去。啊,以什么呢?以序列化,序列化的对象形式发出去,那显然最好的选择就是样例类,因为我们前面讲过,样例类它默认实现了序列化。
04:08
哎,所以这个就变成了,那就message。那这个时候呢,我们初始化一下。诶,我问大家一个问题,同学们。我这样写是不是意味着这个message?会成为我们这个c message的一个什么属性?还记得吗?就是如果样例在我这传了一个参数,传数据,它是不是就成为它的一个属性呢?这点别忘了啊,说老师诶怎么传了一个东西,你你为什么没有这样写下什么用接受一下呢?不,不用了,不用了,我们在讲样例的时候,我曾经讲过一个知识点,就是你这传入的参数默认会成为这一个对象的只读属性。讲过的自己去想一想。好,那就简单了,那这个时候我怎么发呢?各位朋友我直接使用它的play方法来发,大家看我这样写。
05:02
Client message,我把这个message包进去。哦,包你将来如果有多了,还可以包其他的嘛,这样不就舒服了吗?取出来东西多好啊,你别单发一个字串。好,而且我问大家,此时此刻我这个发的是什么?发的是不是他的一个对象,我这里用的是他的派方法。因为我们知道样例类会默认实现apply方法,所以所以这里充分的利用了样例类的apply。我为什么要点出来啊,就是因为同学们地方还不熟悉,要多说一句,这里使用是client。这个case case class的样,这个apply方法记清楚了。样啊样例类CA啊c CA case样例类的apply方法没问题吧,Apply方法好,有了它过后呢。
06:00
OK了,但是不要忘了件事情,你这边发出去以后,你的服务器端马上要去接受消息并处理。那现在我们要看写哪头呢?所以写网络就这样子很麻烦,就写来写去,自己呢,如果没有一个示意图,一定会懵的,现在我们这个复杂度还很低。下面我们那个Spark master和worker的,比这个要复杂一点,如果你的思路不清晰,肯定你是看得懂,让你再加一部分,我告可以负责人告诉你,你都不知道怎么加。啊,虽然你能看得懂,但是你不知道怎么加,因为你自己一加,可能原先能够跑的跑的代码直接跑不起来了,为什么刚刚入职的人不让不让你乱动原动乱动源代码,你动了过后我可以告诉你啊,不但可能新的功能没家具,以前老的功能都用不了了。啊,当然这就是版本控制,版本控制的好处了,他就可以解决这个回回退,好这个拿到过后呢,我们找到server,现在我要做这个处理,如果接收到了。如果接收到什么呢?Message,因为目前我们这个消息是按message发,也就是说你可以认为是这么一个逻辑,就是这条线就是你们现在看到的这条蓝色的线。
07:16
他。是通过啊,它是通过什么发的呢?它是通过。Message这个对象来发而去的话,那么到达这个地方过后,他拿到了,拿到肯定就拿到可能message了吗?那拿到这个可能message你接着写吗?那怎么写呢?Case。KK。诶,怎么什么怎么写message,好整进来,把这个message也拿到。拿到过后问题来了,你是不是要拆解这个message,里面到底是什么信息啊?于是用到我们的麦去匹配。使用这个match。Case进行匹配,当然匹配的时候呢,你可以精准匹配,你也可以模糊匹配,我这里就精准匹配了啊,你也可以模糊,那这个时候呢,我们可以用其他相关技术,这个一般来说,如果你要做这样一个完整的小黄鸡,你肯定不能自已在这匹配这个这个匹配是一个话题,它类似于词法和语法分析,会有相关的技术。
08:21
啊,像Java,像鲁森就干这事了。那么这个时候我怎么办呢?我就直接开case什么呢?好,如果你发的是学习,就说比如说你发的是学费,大数据学费,多少大数据学费。好,我就直接给他回回回顾,现在问题又来了。你回的时候怎么回?显然大多知道有三字回,可是你回的时候,你难道这样回吗?1万,呃,比如说我们这个大数据是15000。一万两两万了呀,是吧。好,2万好,干脆横一点是吧,三万五是吧,RMBRMB,好,那么这个假设是35000,那三万五的话,你这样发出去肯定对方接受起来,你觉得方便吗?肯定不方便,因此我们又要用一种协议,那这个协议呢,我们也要用样例类的形式,比如说这个地方我们叫做server message,哎,这就是分析出来为什么这么设计了。
09:17
所以很多同学会写代码,不知道为什么设计,现在我有serve message,那就简单了,到现在呢,我又在这里面再加一个协议,需要什么加什么。加有什么服务器端。服务器端发给。发给什么客户端的协议,同样也是用这个样例啊样例类,因为它是默认序序列化了嘛,就是样例类对象那简单case class,然后呢,写一个server。Server什么走,一个十寸完事。OK,同学们搞定,那搞定过后呢,你这边要做的一些事情就是将这个家伙包装成,或者说呃做构构建成一个server。
10:10
Message的对象,那就仍然用他的这个方法,Server message。好,洗完了。好,这就OK,那将来在实际运用中,你这个command和comment交给客户端那边去走,在实际运中,你把这个comment和这个server交到另外一台服务器去运行,大家不打架。啊,待会你们可以先做一下这个,说一下这个分布式,好,这个写完了以后呢,好办了,你再拿回去,第一个就回答问题完毕了,后面还有几个问题来说一下学校地址。学校地址。啊,学校地址那就简单,我这边直接写一个,比如说北京昌平某某路。北京。昌平某某某路。楼哦,某某大厦某某大楼写完了,那紧接着我们再写一个啊,就是说还有一个看到它的这个设计呢,还有一个问题就是,诶,他说还有一个就是可以学哪些技术好学一个。
11:17
学习什么技术好,这边呢,我就简单回答一下啊,比如是大数据。哎哟,大。大数据。好,然后呢,前端。啊,前端开始。Py ho,好,就这些问题讲完了,最后还有一种就是如果这个下发了一个怎么办呢?好,我们来一个默认匹配,来写一个S,好,同样我们回复一句话,说你说的什么听不懂对吧,直接说你说的啥子。你说。你说的啥子?好,写完了。好,这样就就OK,那现在呢,整条线一来一回,咱们就应该是OK这边的回应啊,对了,还有一个事情啊,这边没有写回复,这边他一定会接收到一个消息啊,那这边我们要判断,如果接收到了,如果接收到。
12:11
接收到服务器端的回复,那你要显示一下吧,至少。Case怎么办呢?好,很好办,Server message server message,同样我把消息提出来,这个地方其实就用到了我们前面偏函数的这个叫,其实就是我们对象提取器。啊,这知道为什么来的啊,同学们啊,对什么来的,那这边呢,我们这样写就行了。哎,这个地方server message为什么没出来。好引一下包就可以了,那我就打出这个话啊,Print干什么呢?接收到小黄鸡就接收到这个这个小黄鸡客服,我看这怎么写的不用想了,接收到小黄鸡客服啊,收到。小黄鸡客服的一个回复。
13:01
好,收到。收到小黄鸡。小黄鸡这个客服客服人员。客服。这个比如说server的回复。对吧。ERVR,那么回复是什么呢?我是什么,我就把它打出来就可以了,比如说咱直接在这把这个message输出来。完事了,同学们代码写完了,好,就是我们一个简单的一个交互,大家看一来一回,一来一回啊,我问你,你回访问你回复,好,当然大家可以扩展出来,可以做成一个聊天系统,就是大家可以两个聊天,这个是很容易扩展的,因为他这个他这个为什么容易扩展呢?他把这个协议这么做的特别简单。如果这个没有样例类,我带同学写过一个够语言的一一个一一个聊天,就是那个大并发的一个聊天室,那个协议是同学们最难理解的,他这种把这个简化了,不得不说还是非常OK的啊,还是非常OK的好,那现在呢,我们就来彻底的玩一把。
14:07
好朋友们整体跑一下,看看代码能否运行啊来首先呢,我们先运行,先把这个都关掉。啊,不要让他们影响我们,我们先启动服务器端。先启动服务器端啊好,服务器端这边有代码没写完,是哪里写错了这。可他说parameter这个什么?有你的哪写错了?啊,这不不这这样写是不对,Case我这都忘写了啊,都忘写了,这个地方写的不对的啊啊首先把这个呃,Message拿过来对吧,那你这样写的时候肯定是不错的啊同学们刚才应该早点提示我啊match match完了过后呢,这样子包起来就可以了,是这样子吧。把张包解决对,你没没写没写全没写全啊,好朋友们,我们再来更新一把,OK。诶,我刚才都已经说了match p我这孩子忘了对吧,所以大家携代码要小心好小黄鸡呢,已经可以工作了,现在我们打开客客客服。
15:11
好,运行一下。那么这个时候呢,他已经说,诶启动了可以咨询问题,那我就随便咨询几个问题,比如说我们说一下这个学校地址。啊,我们直接是学校地址。好,看看能不能通。好,同学们看这段代码呢?诶,是不是我没我打印出来了吗。收到这个消息没有出来是吧,看这边有没有什么问题。好,他说他报了一个错误。啊,报了一个错误,我们看看这个错误是什么。看看这个错误是什么,我们来一起调一调啊,一起调一调调问题啊,这个问题刚才我们找到的问题呢,诶各位同学,刚才我们找到的问题是因为我在这个地方找的时候,我写了一个啊,刚才那句话是在是在这写这写的十月一写错了改过来就行,好我们再来重新跑一下。
16:10
好,再来重新跑一下,关起来。好,我们再次运行它的服务器端,对服务器端走。二服务器端跑下。好,跑完过后我们再来运行我们的课。客户端走运,别别点错了点,再点这个的话,就代表再次运行服务器端,那肯定要报错的,好运行这段代码跑一个。好的同学们,那么这个时候呢,我们就来随便输一个啊,比如说我先输一个what。诶,他说你说的是啥子啊,他说说明他已经识别了,那我就写一个学校地址。好回复学校地址是北京昌平什么什么的,对吧?好,那我们这还可以咨询什么呢?诶看一下这边呢,除了咨询这个问题,我们还我就粘贴拷贝啊,学校大数据的,大数据的学费,大数据学费。
17:04
好恢复,他说大数据是这么多钱,好学习,学习什么技术啊,什么什么技术恢复啊,可以学大数据前端,那这个地方呢,我们说的乱七八糟的东西,比如说呃,Jack啊,那这个就说我不知道你在说什么。说啥子好,大致呢,这个一个流程我们就清晰了,就清晰,那现在呢,把这段代码呢,给大家整理一下,就是到此我们把那个呢,这个通讯就是整个这个一来一回给大家讲完了,现在我们把它做一个简单的板书。好,我们来看看我们讲了什么东西啊,其实就是讲了一个案例,包括他的分析说了一下,好,我们来走一走,那刚才我们讲的是一个阿卡网络编程的小黄鸡客服。好,我把它呢写到这一栏。那首先我们对他做了一个分析,就是需求是什么样子的,对吧?诶先说了一下需求,我把这个需求呢,整个事儿直接粘贴复制过来,这个就是我们的需求分析。
18:15
需求。需求分析。等一下啊。好,稍稍等一下。练习的时间呢,好,那需求分析呢,我这里做了这么一个需求分析,就是刚才说的啊,刚才说的这么一个图拿过来先。二标题三,刚才这个图呢,已经有了,那需求分析完了,完了以后呢,我们做了一个这个网络拓扑的拓扑图的这个分析,就是说我们将来是可以支持多个拓扑端连接服务器端,哎这一点我们也说了。我们也板述一下,那这个图呢,也给大家拿过来对吧?诶这是这个图给他拿过来。
19:06
然后这个说完以后呢,我们又画了一个程序框架图,帮助我们分析这个程序的结构,就是包含哪些文件,以及它的一个流程,我画了一个图帮助大家理解,嗯,尤其是这种图,对于我们处理复杂的业务会有很大的帮助,现在大家看呢,比较简单就是。说来说,说白了就是这么一个简单的交互,但是将来你们做的程序会比较复杂,可能有好些actor,就服务器端都有好几个客户端,客客户端这个I克之间还要交互好,这个呢,大家就要看懂代码了。我把这个图呢也跟大家分享到这里。好,这是我们的这个程序框架图,然后程序框架图做完了以后呢,我们就代码实现了啊,我们就功能实现走了代码,那代码我们看看我们走了哪些,好同学们看一下,其实重点来说,我们就走了三个文件。
20:06
那首先呢,我们看一下这个目录的结构是什么样子的,程序的结构是这样子。我们写的时候呢,是这样写的。写的时候是这样写的。一个是这个,一个是comment,一个是server。一个是server好,具体的代码来说呢,就是这个位置。好,呃,那么就是这是它的一个目录,那么代码是什么样子呢?我给他整理一下代码,具体代码如下,代码如下对吧?首先我们看第一块代码。第一块代码我们看这个顺序呢,我们是先的先写的12端。好,所以说我先把server的代码呢,给同学们板出到这边来,这是写的server端的代码。那么我们给他写到这叫什么呢?就是这个文件。就是我们的yellow。
21:01
Yellow chicken是I server。点scan。这是一个问题,我们紧接着又写的是什么呢?啊,我们紧接的是写的是这个客户端。那客户端是哪里呢?是这个。就是customer actor。诶,这段代码呢,也给大家拿过来。好,我也把它做一个注释,就是客户端的代码。好,这是customer。诶,卡特这个这个actor。Actor。点SC好放这就行了,好谢谢啊,好谢谢SC。好,那这个写完了以后呢,我们又写了他的协议,这个协议呢也是至关重要的。如果没有这个协议,我们整个通讯起来呢,肯定是呃,比较麻烦,而且将来这个扩展性也很好,因为你将来可兰发的消息呢,可能不只只是这个了,可能还会有其他信息。
22:07
对吧,比如说客户端是哪一个人,你看现在我们没有管理。我现在如果做这样一个事情,就是说两个客户能够交,能够通讯了,你想怎么做?比如我有一个actor。和一个b actor,他们要聊天。这个时候你客户端发的消息必须要指定我是谁,以及我发给谁,然后你用一个map来管理,就非常清晰了。这个同学们可以马上扩展,就稍稍写几行,写上几行代码,这个就扩展起来,就相当于把小黄鸡当做什么呢?当做一个中转站。因为我们这个,比如说一个北京的和一个天津的,他是不可能直接对话的,他肯定是公网,这个大家可以稍微扩展一下就出代码了。好,所以说协议在这呢,咱们可以扩展。这一段是我们的协议代码。好,就放在这里,那么我也取个名字对吧,叫common。
23:02
Co CC。Com mod,呃,不是,这个是message。protocol.scan。好,这是我们这一个阿卡的一个小黄鸡客服案例,就讲到这里。
我来说两句