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

讲一下,网络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

poco网络库分析,教你如何学习使用开源库的更多相关文章

  1. iOS 静态库生成(引用第三方SDK、开源库、资源包)

    一.静态库创建 打开Xcode, 选择File ----> New ---> Project  选择iOS ----> Framework & Library ---> ...

  2. [python学习]结合开源库学习python

    代码碎片1 #!/usr/bin/python # please add your code here! import matplotlib matplotlib.use('Agg') import ...

  3. nova-api源码分析(APP中用到的开源库)

    源码版本:H版 1.paste.deploy 参考文章: http://pythonpaste.org/deploy/ http://blog.csdn.net/xiangmin2587/articl ...

  4. 在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习

    首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?action-viewnews-itemid-61998. C++开源库,欢迎补充. C++在“商业应用” ...

  5. DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像

    背景介绍: 近期项目需求,须要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发.在C++语言下,我使用的是应用最广泛的DCMTK开源库,在本专栏的起初阶段的大多数博文都是对DCMTK开源 ...

  6. 怎样学习使用libiconv库

    怎样学习使用libiconv库 - My Study My Study About My Learn or Study etc. 怎样学习使用libiconv库 By Cnangel on Febru ...

  7. [转贴]C++开源库

    C++在“商业应用”方面,曾经是天下第一的开发语言,但这一 桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C# ...

  8. C++开源库,欢迎补充。

    转载自:http://blog.csdn.net/kobejayandy/article/details/8681741 C++在"商业应用"方面,曾经是天下第一的开发语言,但这一 ...

  9. C++开源库,欢迎补充

    C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C#语 ...

随机推荐

  1. SystemInfo.deviceUniqueIdentifier 返回机器码

    SystemInfo.deviceUniqueIdentifier 返回机器码

  2. MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...

  3. sp_MSforeachtable使用方法 查看库中所有表的空间大小

    sp_MSforeachtable使用方法 1)说明系统存储过程sp_MSforeachtable和sp_MSforeachdb,是微软提供的两个不公开的存储过程,从ms sql 6.5开始.存放在S ...

  4. override equals in Java

    equals() (javadoc) must define an equality relation (it must be reflexive, symmetric, and transitive ...

  5. POJ2104 k-th number 划分树

    又是不带修改的区间第k大,这次用的是一个不同的方法,划分树,划分树感觉上是模拟了快速排序的过程,依照pivot不断地往下划分,然后每一层多存一个toleft[i]数组,就可以知道在这一层里从0到i里有 ...

  6. poj 3735 Training little cats(矩阵快速幂,模版更权威,这题数据很坑)

    题目 矩阵快速幂,这里的模版就是计算A^n的,A为矩阵. 之前的矩阵快速幂貌似还是个更通用一些. 下面的题目解释来自 我只想做一个努力的人 @@@请注意 ,单位矩阵最初构造 行和列都要是(猫咪数+1) ...

  7. XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复

    XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复   XCODE 出现 The opera ...

  8. lintcode 中等题:N Queens II N皇后问题 II

    题目: N皇后问题 II 根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局. 样例 比如n=4,存在2种解决方案 解题: 和上一题差不多,这里只是求数量,这个题目定义全局变量,递 ...

  9. qt外部数据传入实现动态的折线图绘制

    在嵌入式开发中,实现数据收集与显示很常见,对于希望数据稳定的应用来说,               折现图的表现形式很符合条件.               本实现是通过qt的signal-slot来 ...

  10. SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)

    SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭 ...