hanwn

Results 3 comments of hanwn

> 楼主你好,如果客户端主动关闭,定时器队列里对应的定时器是在哪里剔除掉的?我只找到在将关闭的连接通过runInLoop函数加入到队列,从而自动执行httpClose函数,但是在httpClose函数中只是剔除掉了与之对应的channel对象,没有找到在哪里剔除掉对应的定时器队列中的对应的定时器。 > 还有一个问题就是,当有新的请求来的时候,在执行handleConn()函数时,是怎么更新的对应的定时器?我顺着程序找,怎么发现是往定时器队列中添加的新的定时器呢?不是应该更新对应的定时器队列中对应的那个定时器吗? > 楼主辛苦了! 针对第二个问题,其实没有必要对堆中的定时器进行更新,因为对其更新的话需要**找到定时器->修改->调整堆结构**,这还是一个比较耗时的过程,因此这个文件描述符被封装在了`HttpData`类中,而整个server是通过`shared_ptr`对`HttpData`进行使用的,因此对于加入定时器的连接,即使第二次刷新,只要添加第二次的`shared_ptr`定时器,第一次的定时器直接`pop`就好了,不会析构这个`HttpData`对象,所以就不会关闭文件描述符,只是在这个对象内部减少了一次引用计数而已。

确实,我也发现了这个问题,你的第一处修改应该已经被fix了,第二个问题还是存在。 - 专硕 ![image](https://user-images.githubusercontent.com/30523763/173984868-76a4141b-1510-48bb-91e4-835631a8a9cb.png) - 学硕 ![image](https://user-images.githubusercontent.com/30523763/173984915-f0a9d84e-9a2c-4b86-91a5-e339d685a484.png) 其主要差别在于`Academic`和`Professional`,而非在于`Master of Engineering` 位置: https://github.com/TouchFishPioneer/SEU-master-thesis/blob/47c8e3dc0c5826069f2e3fa86333aa9d20a79cea/seumasterthesis.cls#L842 **建议合并第二处更改内容**

> 如果客户端发送的数据不不完整的话 会把线程耗死 那正确的解决方法是什么呢?这样是否可行,需要将未发送完的客户端重新加入epoll监视,等待下次有数据时继续读取?