poco 网络编程

因为之前被坑的比较惨,所以明白一个好的网络库对项目稳定性有多大的帮助。

讲一下,网络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://msdn.microsoft.com/en-us/library/system.net.sockets.socket.select(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx
unix-like 参考
http://www.tenouk.com/Module41.html
posted @   scott_h  阅读(3204)  评论(0编辑  收藏  举报
编辑推荐:
· 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
点击右上角即可分享
微信分享提示