C#网络编程之TCP(七)
一、短连接与长连接
短连接与长连接,是网络系统的设计方法。短与长,并不是严格定义,还有一些不短不长的连接方式。
短连接:存在时间较短的连接,如http。
长连接:存在时间较长的连接,如ftp,telnet。
二、短连接
短连接的特点:
1.交互时间比较短
2.完成之后立即关闭连接
3.下次需要的时候再发起新的连接
具体的实现方式和第四节的类似
客户端和服务端都要按短连接方式实现
客户端:… connect … send … receive… close
服务关:…创建线程 … receive… send … close
每次交互完了,连接随即关闭,所以称为“短连接”
三、长连接
长连接方式:一次连接,多次使用,简单的来说就是用完了不关,下次交互还用这个连接。
while (true) { // 监听客户端发起连接 Socket conn = socket.Accept(); // 处理此连接的请求 // 关闭此连接 // conn.Close(); }
观察示例代码可知,我们注释掉了conn.Close()方法,在处理完请求后,继续进入while循环处理下次请求。
思考一下,长连接方式下,什么时候关闭连接呢?客户端长时间没有发送消息,服务器还有必要一直保持连接吗?
四、反空闲和心跳
1.空闲
(1)什么叫空闲状态?
一个连接连上来之后,什么请求也不发,称为空闲状态。
(2)空闲有什么问题?
空闲本不是问题,但它在服务端占用了一个线程和一个连接。
(3)什么原因会导致空闲状态?
客户端确实没有动作或网络异外中断。
2.反空闲
就是自动关闭空闲的连接。
解决办法:在服务端设置接收超时时间 比如:规定1分钟内没有动静,则为空闲。服务器设置接收超时时间为1分钟即可。一旦超时,则关闭连接。
conn.ReceiveTimeout = 1000 * 60; conn.SendTimeout = 1000 * 60;
3.心跳机制
在服务器使用反空闲机制后,客户端如果想要维持一个长连接,就必须添加心跳机制。
设计思路:创建一个线程,定时向服务器发送一个消息包,表明自己的存在。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南