那今天我们来介绍一下peer connection clan端中的信令,无论我们是实现一对一通讯也好,还是实现多对多通讯也好。都不可避免的,要实现心令部分,那今天我们就来看一下,对于peer connection clan端来说,它的信令是如何设计的以及如何实现的。我在介绍peer connection clan端信令相关内容之前呢,我们先来提几个问题,当我们把这几个问题回答完成之后呢,实际上我们就已经知道peer connection clan端它的信令系统是如何实现的了。
其实这种方法呢,不光是我们可以分析这个connection clan端,这个demo那在我们阅读其他系统的时候,也可以按照这个方法去梳理它内部的实践。当然,如果你是自己实现一个信令系统的话,也要回答这几个问题,那第一个问题呢是信令发送的过程是怎样的?之后呢,我们要了解信令是如何构建的,都包括了哪些信令再下来呢?我们要知道。信令与服务器之间。是如何建立连接关系的?建的是TCP连接还是udp连接?
在连接建立的过程中,我们要注意哪些事项?再下来呢,是信令如何发送?通常情况下,我们都是构造一个数据,通过一个socket将这个信令发送出去,对吧?那当服务端收到这个信令之后,它是否要给我们回一个艾克,或者说回一个怎样的消息,这都是我们需要考虑的问题。好,最后一个问题呢,是当服务器响应之后拿到这个结果,
要做哪些事情?比如说我们要触发。下一步,逻辑的运行,或者说当我们收到服务端断开连接的时候,要释放相应资源。这些呢,都是应该在收到服务端响应之后,我们应该做的事,对吧?接下来呢,我们就一个一个问题来看。对于peer connection客户端来说呢,我们首先要知道信令发送的时机是什么,这里我做了一下总结,
第一个时机点呢,是用户点击connect按钮的时候。就触发了一次客户端到服务器端连接的过程,这是第一点,第二点呢,就是当我们的connect按钮选中之后。用户可以按回车键进行连接。实际上就是鼠标与键盘两种方式是吧?好当我们按了connect按钮之后呢?这个消息会分发给我们应用程序的wndproc交易处理函数,那在这个消息处理函数中会处理可事件。最终呢,会调到on deferred action这个函数中,在这个函数中又做了哪些事情呢?我们现在来看一下。
在这个函数中,会调用conductor对象的start login方法,在这个方法中呢,它的逻辑非常简单。就是调用clan t对象的connect方法,实际上对于conductor来说,它就是一个中转对吧?做我们window与clan t之间的一个桥梁。进入到端之后,我们再来看看它做了哪些事情。首先,如果我们输入的服务器地址是一个域名儿的话,它要进行域名儿解析。之后呢,调用do connect方法进行网络的连接。
当然,如果我们输入的服务器地址是一个IP地址,那它会直接调用do connect方法,所以在这里呢,它会根据你输入的地址进行判断。如果是域名,就做域名解析,最终转换成IP调用do connect好,那通过上面的几步呢,我们就知道。peer connection clan端信令处理的一个大体过程是怎么样的了?对于其他的问题,比如说信令是如何创建的?我们是如何连接到信令服务器的?又是如何发送信令的?
关于这些问题呢?我画了一个图,通过这张图呢,我们来看就更加清楚一些。前面这几步实际就是我刚才介绍的这个connection clan端建立连接的一个大体过程,之后到了do connect这个方法。它会做什么事情呢?首先会构造一个信令,这个信令就是也就是说用户登录信令。当新令创建好之后呢,它会创建一个socket,通过这个socket与新令服务器建立连接。当与新六服务器连接,建立成功之后,新六服务器会给客户端发送一个响应,
那这个时候呢,我们就可以通过on connect这个方法。知道这个响应之后呢,我们在on connect的方法中可以做一些逻辑处理,对于peer connection clan端来说,它在收到连接建立成功之后。就会将之前第一步构造的这个消息发送给服务端,那这个呢?就是我们要回答的第四个问题。客户端是什么时候?如何将信令发送给服务端的最后一个问题是,当服务端收到这个消息之后。会给我们返回对应的消息。在peer connection底层会调用on瑞的回调方法,在这里边儿呢,
我们就可以拿到服务端给我们返回的消息了。好以上呢,就是peer connection clan端与新令服务器之间是如何交互的?那这里我们还有一点需要注意啊。就是当我们收到昂锐的回调之后呢,对于peer connection clan端来说啊,它做了两件事儿,第一件事儿呢,就是触发on close这个事件。将客户端与信令服务器之间的连接给它断掉,之所以要这么做,是因为peer connection clan端与信令服务器之间的连接是短连接,当每处理完一个信令之后,就将这个连接断掉。当下次再需要的时候,
它再重新建立连接。对,所以它是一个短链接,这是第一点,在rode中做的第二件事呢,是收到新令服务器返回的消息之后,要对返回的消息进行分析。那分析完之后,我们从图中可以看到它还有几个步骤要进行处理,那这几个步骤是什么呢?实际上,对于peer connection clan端来说,它与新令服务器的连接啊,是有两个连接,一个是用于处理think in和think out的新令,
那另外一个连接呢?是用于处理wait消息,通过wait消息就可以从服务端获取另一端的offer消息,或者是candidate消息。关于信令的作用,我在前面的课程中呢,都向你做过介绍,那这里我就不再重复了。那从这个时域图中,我们可以看到啊,实际上第二个连接是什么时候建立的呢?就是在第一个连接的回调函数on read中。创建的连接当信令服务器收到第二个连接请求之后,它会回调on hanging get connect这个函数。那在这个函数中呢,
又会发送位的消息到信令服务器,信令服务器收到位的消息就会从它的缓冲队列中。取出另一端发送的offer消息或刊例,这些消息那最终呢,将消息通过on hanging get read回到函数。返回给peer connection cline在on hanging,get read这个函数中呢,同样的也会调用on close回调函数。之后,第二个与新六服务器之间的连接呢,也会断开断开连接之后呢,它又会重新调用第二个socket发送connect链接。再次,与信令服务器建立起连接。就这样,
循环往复连接,信令服务器获取消息断开,再连接获取消息,再断开。这样就形成了一个循环,那通过这张图呢,相信你已经对peer connection clan端进行信令处理的逻辑已经非常清楚了。那可能有的同学会有疑问,觉得这个connection clan端,它的信令处理啊,非常的繁琐,就那么几个信令,还要用两个连接。而且这两个连接都是短连接,觉得非常的麻烦,
对吧?那实际上呢?皮尔肯大森可兰端之所以这样做,它是有原因的第一个。之所以会选择短连接,是因为。peer connection clan端与新令服务器之间使用的是HTTP协议,那短连接是很自然的事儿,对吧?这样可以。减少服务端的负载压力,正是由于短连接的原因,所以为了更好的获取对端的消息。所以peer connection呢,又建立了第二个socket连接,
这样就可以不停的向服务端进行查询。最终拿到对端发送给的消息,这样这个消息呢,就不会被遗漏,这就是平时connection clan端把心灵处理逻辑设计的如此复杂的一个原因。如果是我们自己实现的话,实际上我们可以把这个过程进行简化,对吧?可以让它建一个长连接,那一直保持着连接状态。当有心灵过来的时候呢,就直接发送给客户端,对这样的话,整个逻辑就会简单很多好,现在我们了解了peer connection clan端的信令处理逻辑。
后边儿呢,我们再看它代码的时候就会非常容易了是吧?就不至于由于你对它的这套逻辑不了解,导致你看代码的时候看的晕头转向。好,今天的课呢,我们就介绍到这里,那在下节课中呢,我会带你阅读一下这部分代码,使你对这部分逻辑呢更加清楚。那有任何的问题呢,你可以到讨论区或者是群里去给我留言,我在那里呢,给你做详细解答,谢谢。
如有侵权,请联系我删除