因为之前被坑的比较惨,所以明白一个好的网络库对项目稳定性有多大的帮助。
| 讲一下,网络IO模型有哪几个种类, |
| |
| 阻塞: |
| 1.一问一答(send()一个,recv() 一个) |
| 2.一问多答(send()一个,recv() 多个) |
| |
| 非阻塞: |
| 1.一个线程一直recv(), send() 按需发送 |
| 2.一个线程send(),一个线程recv() |
| |
| 所有的网络IO模型 ,建议参考 陈硕 <linux网络编程> |
参考
【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较
还需要根据自己的业务 确认使用长连接,短连接(有状态,无状态), TCP还是UDP, 服务端超时T线, 黑名单, !
如何使用POCO 最好还是应该从代码实现来看,确认各个类的继承关系,全部看完基本就知道,自己要用什么了。(使用参考TestSuit,Sample)
| 看需求,确认用哪个类, |
| - 如果你用http进行POST GET REQUEST处理,那么 *HTTP、HTTPClient、 HTTPServer*应该是你的选择, |
| - 如果你要用ping命令探查一些主机是否在线,那么就用*ICMP* 。 |
| - 如果要用socket进行收发数据, |
| |
| 先确认 是写client端还是Server端, 使用TCP还是UDP,是阻塞还是非阻塞,是否有发广播等等... |
| client可以用:【Socket】中的Socket,StreamSocket, RawSocket,DatagramSocket... |
| |
| Server可以用:【Socket】中的Socket,StreamSocket, RawSocket,DatagramSocket... |
| 【Reactor】中的ParallelSocketAcceptor,ParallelSocketReactor,SocketAcceptor,SocketConnector,SocketNotification,SocketNotifier,SocketReactor |
| 【TCPServer】中的TCPServer,TCPServerConnection,TCPServerConnectionFactory,TCPServerDispatcher,TCPServerParams |
| 当然这只是其中的很小一部分。 |
| |
| |
| |
| 无状态,sendBytes(),recvBytes()都是不确定的 |
| 首先sendBytes()有事件就发送,很简单没问题。 |
| 那recvBytes()呢?如何一直接收数据? |
| |
| 这又回到更原始的问题,网络模型 select,poll,epoll,是什么,用什么实现的。 |
| 我们知道,select,poll都是先把fd加入set中, 然后对set中所有fd进行轮训,确认是否可以read,write,或者exception. |
| 首先系统函数select中只是对set中所有的fd进行轮训一次。 |
| |
| |
| 那么select(),poll(),只是查询一次, 如果下次又来了数据怎么办? |
| =>只能用while()不管去轮训状态了, |
| 所以不断接收数据的模型是这样的 |
| windows select参考 |
| https: |
| https: |
| |
| |
| |
| unix-like 参考 |
| http: |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2013-12-14 windows log