00:00
那么接下来咱们就开始完成一个叫做非阻塞式了,对吧,叫做test,叫做man blocking对吧?来完成一个非阻测试,也就是说你要想完成非阻塞试,你说不这几个必须得有啊,得有通道,得有缓冲区,得有选择器,我们过来开始那面还是一个是客户端,对吧,叫做client对吧,这叫做客户端对吧?这里头大家要注意啊,现在咱们写的应该是你们以后工作一旦用,那就是核心,听懂吧,多短,比那个本地那个final channel要重要,明白吧,对吧,这个才是我们讲的的目的啊。那么接下来说课端呢,还是要点写,那客后端得写一个叫做socket China,点上open,又一个an ne socket。
01:00
Base,这里指定IP和端口号9898对吧,然后有异常接收一下,然后用变量接收一下,叫做s channel等以后,然后呢,我们第接下来第一步,我把这次我的解注式叫做获取通道,然后接下来我要干嘛呢?第一件事我得先把它切换成非阻塞模式,是不是叫做切换,切换成非阻塞模式,非阻塞阻塞模式对吧,那也怎么切换,通过一个方法叫s channel,点上叫做con finger broken,把它设置为false,这就切换成非阻色模式,看到吧,那接下来就开始该咋做,咋做呢?接下来我是不是分配缓冲区啊,分配分配一个指定大小的缓冲。
02:00
空区域,那就是s channel点上呃,S be8uff分八分b off等于BA8分,点上ALOET1024下来是不是就发送数据啊,对吧,叫做发送数据给服务端对吧?那么现在发送点什么呢?那就发送一个时间吧,可以吧,我就发送一个实时的时间,是不这个呀,对吧?那咱们不是要讲1.8的吗?我说1.8出了一套全新的时间日期一篇,咱们稍微用一下,可以不可以让大家看一看啊,叫data time.now对吧?这个叫做或诶不行啊,我的距离K是1.7的,嗯,那还不行,那来个new date吧,还是new date,然后呢,这是不是就当天时间呢,点to分钟。
03:00
是不都丢to包是吧?然后来个点to string对吧,可以吧,咱们就别格式化了,是不是怪麻烦对吧?然后呢,点To B,然后加上,然后直接就点get就完事,就发出一个时间就过去了对吧?发送时间过去,然后呢,pf.flip一下,然后通过S参把我这个时间是不是right过去呀,然后Bo标点clear一下,最后是不是关闭通道,关闭通道通过s channel.close搞定了,相这的端少多了一步,是不是切换成非子侧呀,对吧?那么接下来就服务端,服务端的稍略端就复杂一点了对吧?那首先我来个不管怎么样得先过去吧,对吧,Server serve socket China。点上open对吧。
04:03
然后呢,有异层先抛出去,然后呢,这里呢,变量接收一下叫做so of the China同学们对吧,加上注释都给它加加上那叫一,这叫获取通道对吧,获取完通道不要忘了先给的怎么样切换成非主色模式对吧,从过ss channel点上对吧,叫做con walking设置为false,然后呢,是不是开始绑定连接啊对吧,绑定绑定连接通过serve soet点上绑定出来的端口号啊,Socket address指定的9898对吧对吧,然后第四步,注意我们现在需要选择器对吧,我所以监控我说安阳受碰了对吧,那第步叫做获取。
05:04
获取一个选择器,怎么获取选择器呢?实际上他们都有很多这规律的特额,对吧?获取通道用open,那获取选择器也用open select点上open,这样的话就得到一个选择器selector select选择器就拿到。是了吧,那接下来我们说了,选择器是监控通道啊,你得把这个通道做最后选择器上呢,是选择器才能交出来呢,对吧?那接下来我们说将通道说注册到选择器上啊,将通道注册到选择器上,选择器上怎么注册呢?得通过通道,对啊,通过通道它有一个方法叫做register对吧,说你要把这个通道注册到哪个选择器上面呢?Select,注意这个时候后边是不是需要一个int型的OS什么,对吧?所以这个是什么呢?我们说这个呢,我们可以称之为叫做选择键,这个选择键是变应什么面选择键的作用就是用于说我这个选择器监控你这个通道的什么状态,或者叫做什么。
06:30
事件。这监空中土道是到底是读状态我还是精控他的写状态,我还是精控状的精神状态,这书状态啊,我说分别有几种呢?大家过来看,这里会有一个呃,选择器s select k对吧?这里是不是有个select k啊对吧?说select s k是什么东西呢?它说称为选择键呢,对吧?说表示这个通道,这个通道和选择器之间的关系了,对吧?我们称它为选电,说每次向选择器注射通道时,就会选择一个事件,说事件有几种呢?刚才我们说了是不就有这几种啊,到底是让我们说监控什么状态是不是?它有四个常量分别一个叫做读状态啊,一个叫做写状态,这个叫做连接对吧?考式连接啊,2CEL是不是叫接收,他们分别用四个常量值,是不是给我们提供过来了,提供了我们只需要做。
07:37
注册的同时指定我要监听的是一个什么状态,是不是可以了,读写接连接和接收,如果说你想监听这个这个通道的多个状态,是不是这样。你是不是可以用或运算符啊,叫未获运算符,是不是给它连接一下,同时监控监控这个通道的叫做read和right读写状态都监听。
08:03
那么我们说现在我要监听这个SS圈的到什么状态呢?我是不是想让他接收啊,是接接连接监收客户端来的这个连接,那也就是说通过那个常量值叫做select p,这是选择键点,有个叫做op accept,这是叫接收accept。是不是吗?那这样的话就把通道注册到了选择器上,并且指定叫做监听事件,对吧?监听事件我们说监听的是什么事件,监听的是接收事件,接收事件。这句话能明白吗?我这样的话是不是就把通道注册到这个选择器上了,那么这个时候选择器是不是就监听你这个通道的接收时间,如果有接收,接收准备就绪了,我是才开始做下一步的操作,比如说获取当前连接到那个so channel。
09:09
对不对,就说之前我们是不是写死成,写死成什么,我上来我就别的不说,我就得把ex的,还有S说主塞等待远程的连接对吧?而现在是什么情况,我利用选择器先听这个状态,什么时候它准备就绪了,我再去获取它的那个链接吧。才可以。这就叫非主色。看到没,那我们注册好了以后该怎么用呢?注意566的话,我们就可以通过选择器是不是开始轮询的获取当前这个选择器上什么事件准备就绪啊,对吧,我们说叫做轮询式轮询轮询式的轮询式的叫做获取选择器上已经叫做准备就绪的事件,对吧的事件受允群的去鉴定啊,那就是外了说吧,这是不是就循环的通过select开选择器有个方法叫做select卡,它返回值如果大于零,说明现在已经有一个,至少是不是有一个已经准备就绪了,如果大于零说明就有一个你我选择气上监听的这个SK已经准备就绪了。
10:34
是不是至少有一个准备就绪了,准备就绪我是不是可以工作了呀,对吧,那这个时候呢,我就把当前选择器上所有的这种监听的事件是不是获取啊,看看我要去这个准备就绪的到底是一个什么试件吗?对吧,我们说怎么获取呢?通过select选择器,它有个叫做select case,它返回的集合吧,包括了这个里边,这个集合里边包括了所有选择器上所注注册的事件。
11:08
是是吧,对吧,包括了所有的注册事件,然后呢,我接下来直接来个叫做这认识不认识数迭代器啊,它返回的集合,我说直接混合编代器啊,这个迭代器中放的全都是SXK对吧,也就是所有的选择键,说白了也就是或者说ti对吧,就是所有的你监听的这些状态,监听的这些事件。这句能理理解吗?对吧?那拿到选择器我是不是开始便利了呀,对吧,从这叫做获取,其叫做获取当前,当前选择器中选择器中所有对吧注册的选择键,选择键说白了就是说注册的呃状态啊,监听状态对吧说已注册或者已就绪的监听事件,监听事件。
12:19
很搞定吧对吧,就是获取所有的这个东西,到底是有读就绪还是写就绪,还是连接就绪,那么有了这个数K,我说你可以把这里边的是K取出来,看看它到底是什么状态啊,那那就八对吧,叫做迭代,迭代获取吧,那我就直接迭代器迭代这个可以吧,叫it.test next,然后通过it.next获取XK对吧,比如说叫做SK叫什么叫获取就绪的试件对吧,叫做化学准备就绪,对事件对吧,事件呢事件对吧,获取准备就绪的事件来到这个事件我们要干嘛呢?我得知道这个事件它到底是独秀句。
13:19
还是写就绪,还是连接还是接收吧,是不是得看看是四种的哪一个呀,你怎么只需要if判断是什么就绪了九对吧,说判断判断具体是呃,什么事件准备就绪,什么事件准备就绪,因为你不同的就绪我是做不同的操作呀,对吧,比如说如果你的这个事件它是叫做点意思。Acceptable,这叫做接收那个事件就绪吧,对吧?如果接收就绪了,我是不是就接收客户端连过来的套节字是不是接收了,那就是通过服务端是不是叫s China,点个方法怎么接收来呀?X set得到是不是远程来的so China啊对吧?得到远程来的so China对吧?获取客户端连接对吧?说若接收状态就绪,说若接收就绪,接收就绪那么就获取客户端的连接,拿到这个客户端连它一的是非主测试了对吧?千万这里要注意啊,你一直把这个客户端的通道切换成非主侧。
14:47
听懂吗?你也得把它切换成非阻塞模式,说切换非阻塞模式也是X参能点上叫做它这个no,然后这干嘛呢?那我是不是就多了个通道啊,你要想用选择器监控呢,你得把它怎么样,是不是也得注册啊,对吧?将该呃通道注册到选择器上,那这个时候呢,叫s channel点上re,把它注册到这个选择器上,那么我们说你得到这个通道目的是不是读它的数据啊,那就是用select k,我要监控它的读就去事件,读就去状态,是不是接收他的读就绪状态,那么这个时候就是如果接收成功,如果你过来的是接收就绪的状态,我都就完成了。
15:48
是不,我听了对吧,那现在我们有两,那是不是另外一个else if,那是么?FK要是is readable对吧?当然它说有四个对应的呀,叫做点is,叫做CE连接,比如说接收连接读物写那是不是有效,那这个呢,现在我是不是要监控它的readable,看看它是不是读就去是吧,说若读就去呢,我是不是开读了呀,开读注意这个呢,又是新的,我要过去当前选择器上读读就绪状态,读就绪状态的通道是吧?先得获取读就绪状态的通道,通过select是选择器啊点呃不对不对,SK啊,通过SK.channel看到啊,然后得到一个什么呢。
16:49
啊,得到一个socket China得到一个。这能看到吧,是获取了读径去专向通道啊,他需要强转一下,那拿到这个通道接下来汇干了不,接下来是不是就可以读取了,对吧,读取数据,读取数据那是不是得有BA8UFF分啊,B的new new叫BA8UFF分,点上a lo1024,然后我们当然是不是可以循环的去读啊,对吧,叫做while,它返回棱吧,我接收一下用打印,那这样的话叫那等于S才点上read到八分钟,如果大于零,所以是不是有数据啊,如果有数据我就B点力,是不是打印一下new g,然后把这个呃b.a read转换成字符串,从零到then,最后Bo f点啊可。
17:53
说搞定了对吧,搞定搞定了以后,那这个就是我就监控的两种状态就可以了,完是吧,但是还没啊注意这个selecton k你用完了以后,你得把它取消掉,不然不取消它是不是一直有效啊,比如说你某一个通道对吧,它本来连接这个已经完成了,然后呢,你不管它取消它下一次是不是还是连接完成啊,还是连接完成,你是不是得把它取消掉,怎么取消呢?你只需要通过这个迭代器的remove方法取消即可。
18:29
是不是对吧,把这些操作完事了以后呢,通过it点是不是取消选择键呢?对吧,叫做15取消取消选择键选择也就是那个selection对吧,Selection k考虑那这样的话我们就基本完成了,对吧,你就可以时时刻刻去监控这个利用选择器去监控客户端的状态。
19:05
那么成不成功是不是稍微试一下啊,对吧,稍微试一下右键是不是先看服务端呢,再开客户端呢。是不是有了注意,这是我服务端吧,服务端接收了客户端发过来的消息了,是不是这个时候啊,当然我客户端是不是就发过来一个客户端发一个时候是就关闭了呀,那这个时候我们说服务端他是不是一直轮循着等待来的状态啊,说谁什么注意他是不是就取谁,对吧,这个时候他是不是可以干其他事情啊对吧?那比如说这个时候说干干什么事情,他说比如说我有十个客户端访问他,你说都行,现在说十个客户端都能访问他,对吧?比如说我第一个客户端说我这个这个什么就接收就去,他是不是更接收啊,第二个客户端来这个读取就去,是不就该读取,如果第一个课户端没有接收就绪,但是我第二个课后端读取就绪了,我能不能干读取的操作就完全可以对吧,对吧,那这个时候呢,我们说你再来课后端行不行呢?我右键再来一个课后端是不是也行啊,我说我再来课后端行不行呢?再来课后端是不是也行啊,对吧,一直。
20:17
三有效。是不是这个,甚至我们说再来个稍微复杂点,我课后端是不是就发了一个数据啊,咱们是不是来个循环法,是不是个循环法呀,对吧,比如说咱们搞个什么循环法呢?搞个这玩意scanner可以吧,搞个scanner来个system.e ctrl shift o对吧,整点稍微有点意思,来个well,是不循环它呀,说scanner.has next说有数据,我是不是接收数据啊,叫scan点啊next,然后把这段呢copy过来,然后呢,我拼new date new date之后get,删掉,拼上一个杠N,拼上str,是不是给它括起来呀,就把这一整段都给它发过去,然后再去点get bit。
21:12
发这没问题吧,就这样。行,我把他们都关了,关了以后呢,就可以掀开服务端,再开客户端,对吧,那么这样的话呢,这是客户端吗?然后看另外一边这是服务端嘛,对吧,那我客户端就可以干嘛了呢说嗨。是不是不是有害啊,对吧,然后这个呢,好了是不有啊对吧,对你好,所以你好,对吧,那这样的话,我说客户端是可以有多个呀,对吧,我再开一个客户端,再来一个,这是用新的客户端吧,是吧,你好。
22:02
是不有啊,这是聊天室聊天室吧,这是对吧,就这么简单是吧,他也好是不啊对吧,对吧,然后呢,这个说这个客户端说对吧,说我也好说都好可以的对吧。那这就是一个聊天室,回头你说要稍微想想写的复杂点,你说什么来个名字啥的呀,说谁谁谁说几点说呢,说什么什么什么,这是不是就是聊天室啊,对吧,就是说你一会儿你搞个服务端对吧,你们组的人就可以在你的这里聊天了,是这意思吧,对吧,就在你这聊天,这就是聊天室,那也就说现在我们是不是都是单独的县程啊,我们说说你比如说你来一个这个接收就绪,是不在这个县上啊,你完全如果接受就绪,你完全可以把它分配到一个独立的县程上啊,读取操作,你说完全给它分配到一个独立的县程啊,也就是说我如果客户端有准备出去的状态,我可以把客户端的这些这些请求分配到一个画多个线程上吧,就几个就行啊,对吧,你可以通过一个线程去管理所有的请求,你也可以用有限的几个线程是不管理所有的请求啊。
23:25
这就看你,但是有同学说说那我能不能完全聊天呀,那聊天可能是不是就得多先成了呀,对吧,因为聊天一个是不是得读啊,另外一头得写呀,对吧,那才能聊天,但是聊天式还是很简单,是我对吧,好了,那么这就是非组是吧,哎哟比较重要,以后大家到工作的时候,应该现在也就是说现在用到的概率提高。同,什么F?
我来说两句