项目中遇到的一些问题
1.addsig函数:
遇到SIGPIPE信号选择忽略,这是个什么信号以及为什么要忽略可以参考一下这两篇文章 //还可以用signal(SIGPIPE,SIG_IGN)处理https://www.cnblogs.com/lit10050528/p/5116566.html 和https://www.jianshu.com/p/1a9ea7f4d46e
-总结一下过程就是,一个客户端单方面关闭了连接(close),但是服务端不清楚客户端是close还是shutdown,如果服务端以为客户端是shutdown状态就会继续向客户端发送信息(write),第一次
如果发送缓冲没问题的话服务端会收到正确写入,但是发送的报文到了客户端(注意:客户端此时是close状态也就是说不发送但也不接受消息),根据TCP协议的规定,客户端会给服务端发送一个
RST响应报文,服务端收到这个响应报文后若再往这个客户端发送数据时,再次调用write发送信号时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不能再写入数据
因为SIGPIPE信号的默认行为是结束进程,而我们绝对不希望因为写操作的错误而导致程序退出,尤其是作为服务器程序来说,所以为了避免这种情况导致服务端进程退出,应该捕捉这个信号并忽略它
2.epolloneshot事件
使一个socket连接任何时刻都只被一个线程所处理
池的概念和EPOLLONESHOT事件(读Linux高性能服务器)_零蛋蛋的技术博客_51CTO博客
(23条消息) EPOLLONESHOT事件_liuxuejiang158的博客-CSDN博客_epolloneshot
3.实验过程中出现无法访问此页面(响应时间过长)的问题
类似于这种页面,但不是拒绝连接,是响应时间过长,原图找不到了:
可能是你的linux系统忘了装apache😅(因为我当时是最小化安装,忘记了没有安装apache)
可能跟ssh服务和防火墙也有点关系,启动了apache还是一样的话可以试试这篇文章的方法,事情是这样的:题主刚好因事重启了电脑,在安装apache的过程中,发现Xshell连不上了,看到这篇文章,看到第2点的时候发现Windows下 ping Linux的IP地址ping不通,从而发现了问题,所以当时除了启动apache,同时也把防火墙关闭了 和 开启ssh服务,于是 最后问题解决了我也不知道跟后面两点有没有关系(当然 如果你很想探究到底是哪个原因的话也可以在成功之后通过关闭一个服务的方法来探究)
所以也可以参考这篇文章:https://blog.csdn.net/weixin_44080445/article/details/110714332
4.分散读与集中写
参考文章:https://blog.csdn.net/qq_43684922/article/details/104114331
5.定时器模块
为了增强复用性,所以用的模板,中间遇到两个问题
5_1:回调函数的设置,这里我是模仿的pthread_create函数里第三个参数
可以看看这篇文章:C++中类成员函数作为回调函数 - schips - 博客园 (cnblogs.com)
5_2:类模板和模板函数出现“XXX未定义的引用”
原因:在使用类模板的时候,将类的申明和定义放在两个文件中,找不到对应的函数实现 — 在看到实例化模板之前,编译器对模板的定义体是不处理的,因为编译器预先不知道 typename 实参是什么
解决办法:将类的定以和申明都放在一个头文件中
参考文章:定义类模板,未定义的引用_Jorhson_Deng的博客-CSDN博客_使用模板类未定义的引用
类模板和模板函数连接出错处理 - 宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒 - C++博客 (cppblog.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话