20210420目前遇到的三种析构情况 - ziyouzy/2021blog GitHub Wiki
1.客户都安发来了断开信号:
首先由各个READriver识别断开信号,发送给eventbox,evnetbox触发对客户端ip所属的一系列对象进行析构操作
(如:首先析构fromusrio808,然后tousrio808,最后是todoor)
2.心跳包发来了river异常信号(心跳包只会存在于READriver中)
直接将异常信号发送给eventbox,eventbox触发对异常river的ip所属的一系列对象进行析构操作
(如:首先洗后异常的fromusrio808,然后tousrio808,最后是todoor)
##1,2的逻辑大致相同,最重要的是他们都不会让Read的循环自动return,而是只将时间发送给evnetbox,再去让eventbox来决定接下来该做什么,这似乎会存在循环卡死无限发送event的情况后期再完善吧##
3.连接重置后对旧连接的析构逻辑
原则是要实现“功能健全”的“每一个”river的析构逻辑
也就是说,先析构一个READriver后,再析构掉与其相关的conn,完成这两个步骤后,需要之后的WRITEriver不会受到影响,同时也要一次析构各个WRITEriver;
READriver和WRITEriver都会主动进行析构,而不是基于eventbox的信号,区别在于READriver也会负责Close与其相关的Conn;
创建新WRITEriver的逻辑同样也不会对相关的conn进行额外的close()操作;
只有READriver识别到客户端的主动Close()或者服务端的心跳超时等event才会发送信号给eventbox;
但是WRITEriver则不会,而只是发送一个error;