2026/3/31 16:59:22
网站建设
项目流程
增城微网站建设,技术支持 广州骏域网站建设专家,网站建设与管理课程设计论文,全屏网站代码#x1f3ac; HoRain 云小助手#xff1a;个人主页
⛺️生活的理想#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站#xff0c;性价比超高#xff0c;大内存超划算#xff01;忍不住分享一下给大家。点击跳转到网站。 目录
⛳️ 推荐 … HoRain 云小助手个人主页⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。目录⛳️ 推荐 Socket网络通信过程与IO多路复用原理详解 一、Socket网络通信过程通俗版1. Socket是什么2. Socket通信的打电话过程3. Socket的两种主要通信模式⚙️ 二、IO多路复用原理高效处理多个连接1. 为什么需要IO多路复用2. IO多路复用的三种实现方式(1) select(2) poll(3) epoll推荐3. epoll的工作流程 三、为什么Redis等高性能服务器都用epoll 四、总结Socket与IO多路复用的关系 五、实战建议 Socket网络通信过程与IO多路复用原理详解嘿听说你想了解Socket网络通信和IO多路复用原理太棒了这可是网络编程的核心知识我来给你用大白话讲明白保证你听完就懂 一、Socket网络通信过程通俗版1. Socket是什么Socket IP地址 端口号就像两部电话的号码IP地址定位网络中的设备比如192.168.1.100端口号定位设备上的特定应用程序比如80是HTTP服务3306是MySQL数据库 小贴士端口号0-1023是知名端口1024-65535是动态端口2. Socket通信的打电话过程想象一下你和朋友要打电话服务器监听服务器先开机服务器创建一个Socket绑定IP和端口比如192.168.1.100:8080服务器处于等待接听状态就像电话响铃等着你接客户端请求你拨号客户端创建Socket指定服务器的IP和端口客户端发起连接请求就像你拨打192.168.1.100的8080端口连接确认接通电话服务器接受连接请求创建一个新的Socket用于和你通信这个新Socket就是已连接套接字专门用于和你通话服务器原监听Socket继续等待其他来电数据传输打电话聊天双方通过Socket的读写接口发送/接收数据TCP协议保证数据可靠传输不会丢失、不会乱序断开连接挂电话一方发送断开请求双方通过四次挥手确认所有数据已传输完毕关闭Socket释放网络资源 重要概念监听套接字只有一个和已连接套接字可能有多个3. Socket的两种主要通信模式特性TCP面向连接UDP无连接连接要求必须先建立连接三次握手无需建立连接直接发送可靠性可靠数据不丢失、有序不可靠可能丢失、乱序传输速度较慢较快适用场景网页浏览、文件传输、数据库连接视频直播、语音通话、游戏数据 例子微信文字聊天用TCP确保消息不丢失微信语音/视频用UDP允许少量丢包优先保证实时性⚙️ 二、IO多路复用原理高效处理多个连接1. 为什么需要IO多路复用想象一下你是一个电话接线员阻塞式I/O你只能同时接一个电话其他电话都得等着效率低非阻塞I/O你不停地检查每个电话是否响铃CPU空转浪费资源IO多路复用你同时监听多个电话当有电话响铃时才去接高效2. IO多路复用的三种实现方式(1) select原理用位图存储所有Socket轮询检查哪些Socket有数据缺点每次调用要拷贝所有Socket到内核效率低O(n)限制最多1024个Socket默认限制类比你拿着一个名单一个一个问你的电话响了吗(2) poll原理用链表存储所有Socket轮询检查优点没有FD数量限制链表动态扩展缺点效率还是O(n)每次调用要拷贝所有Socket类比你拿着一个名单一个一个问你的电话响了吗(3) epoll推荐原理用红黑树管理Socket 就绪链表通知优点仅在epoll_ctl时拷贝Socketepoll_wait时无拷贝效率O(1)直接获取就绪的Socket支持边缘触发(ET)和水平触发(LT)类比你有一个智能系统当电话响铃时自动提醒你不用你一直检查 为什么epoll这么牛因为它只关注有电话响的那些而不是所有电话。3. epoll的工作流程epoll_create()创建一个epoll实例返回一个文件描述符epoll_ctl()将需要监听的Socket加入epoll实例epoll_wait()等待事件发生返回就绪的Socket列表 举个例子你用epoll监控1000个Socket当其中10个有数据时epoll_wait会直接返回这10个Socket不需要遍历全部1000个。 三、为什么Redis等高性能服务器都用epollRedis使用IO多路复用主要是epoll的原因避免阻塞一个连接处理时不会阻塞其他连接高效处理单线程就能同时处理多个连接请求减少资源消耗不需要为每个连接创建新线程高并发可以轻松处理成千上万个并发连接 Redis的IO多路复用原理通过单个线程同时监听多个网络连接的可读/可写事件实现高效的网络IO操作。 四、总结Socket与IO多路复用的关系Socket是网络通信的桥梁提供网络通信的接口IO多路复用是高效管理多个Socket的技术两者结合使用Socket建立连接用IO多路复用高效处理多个连接 用一句话总结Socket是打电话IO多路复用是智能接线员。 五、实战建议如果你正在开发高性能服务器首选epollLinux下不要使用select因为有1024的限制如果你使用Python可以使用asyncio库它底层使用了epoll 举个实际例子Nginx服务器使用epoll来处理成千上万个并发连接这就是为什么它能这么高效需要我帮你写一个简单的Socket服务器示例或者解释epoll在Python中的使用吗或者你有其他关于网络编程的问题随时告诉我 ❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧