1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字.让套接字进行工作.避免套接字进入阻塞模式,进行无谓的等待.选择模型的核心的FD_SET集合和select函数.通过该函数,我们可以们判断套接字上是否存在数据,或者能否向一个套接字写入数据. 2.select函数:int select(    int nfds,//忽略,只是为了兼容而存在.    fd_set FAR* readfds,//可读性检查(有数据可读入,连接关闭,重设,终止) …
参考:http://m.blog.csdn.net/article/details?id=51420015 一.套接字模式 套接字模式简单的决定了操作套接字时,Winsock函数是如何运转的.Winsock以两种模式执行I/O操作:阻塞和非阻塞. 在阻塞模式下,执行I/0的Winsock调用(如send和recv)一直到操作完成才返回. 非阻塞模式下,Winsock函数会立刻返回 1.阻塞模式 套接字创建时,默认工作在阻塞模式下,列入对recv函数的调用会使程序进入等待状态,知道接收到数据才返回…
1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字.让套接字进行工作. 选择模型的核心是FD_SET集合和select函数.通过该函数,我们可以们判断套接字上是否存在数据,或者能否向一个套接字写入数据. 用途:如果我们想接受多个SOCKET的数据,该怎么处理呢? 由于当前socket是阻塞的,直接处理是一定完成不了要求的 a.我们会想到多线程,的确可以解决线程的阻塞问题,但开辟大量的线程并不是什么好的选择: b我们可以想到用ioctlsoc…
异步选择(WSAAsyncSelect)模型是一个有用的异步I/O 模型.其核心函数是WSAAsyncSelect,该函数是非阻塞的 (关于异步io的理解详情可以看:http://www.cnblogs.com/curo0119/p/8461520.html) 它可以用来在一个socket上接收以windows消息为基础的网络事件.它提供了读写数据的异步通知功能,但不提供异步数据传送.WSAAsyncSelect模型的优势在于只需要一个主线程即可.缺点是必须要绑定窗口句柄.即要先调用create…
讲一下套接字模式和套接字I/O模型的区别.先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事. 套接字模式:阻塞套接字和非阻塞套接字.或者叫同步套接字和异步套接字. 套接字模型:描述如何对套接字的I/O行为进行管理. Winsock提供的I/O模型一共有五种: select,WSAAsyncSelect,WSAEventSelect,Overlapped,Completion.今天先讲解select. 1:select模型(选择模型) 先看一…
原文:http://www.51see.com/asp/bbs/public/bp_show.asp?t_id=200308131152297103 讲一下套接字模式和套接字I/O模型的区别.先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事.套接字模式:阻塞套接字和非阻塞套接字.或者叫同步套接字和异步套接字.套接字模型:描述如何对套接字的I/O行为进行管理.Winsock提供的I/O模型一共有五种:select,WSAAsyncSelect…
参考:http://blog.csdn.net/cq361106306/article/details/41876541 效果: 源代码: 解释: CLoad3DS.h为加载3DMax模型的头文件,CLoad3DS.cpp为加载3DMax模型的实现文件, nehewidget.h为Qt下使用OpenGL头文件,nehewidget.cpp为Qt下使用OpenGL实现文件. 注意: 1.3D模型和纹理图片资源需要放在源代码同一目录下的Data目录中,即/Data/3DS和/Data/pic下. 2…
1.概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock) 四种调用模式: 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果前,该调用就不返回.也就是必须一件 一件做事,等前一件做完了才能做另一件. 例如在C/S模式的某个流程中,你服务器提交了某个请求,在服务器处理完毕返回结果期间客户端什么 也不能做. 异步:异步概念和同步相对.当一个异步过程调用发出后,调用者不会立刻得到结果.调用者在发出 调用后可以继续做自己的事,被…
代码片段,在windows下用C语言调用文件选择对话框,以备忘 #define DEFAULT_DIR "" char extraction_path[MAX_PATH] = DEFAULT_DIR; /* * Browse for a folder and update the folder edit box * Will use the newer IFileOpenDialog if *compiled* for Vista or later */ void browse_for…
异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和异步选择模型最主要的差别在于网络事件会投递至一个事件对象,而非投递至一个窗口. 首先,初始化网络环境,创建一个监听的socket,然后进行bind,listen操作.接下来我们会创建一个网络事件对象,它和我们讲内核态下线程同步里边事件对象很类似,我们可以调用WSACreateEvent来创建它,其声明如下: WSAEV…
本文整理于:http://blog.csdn.net/piggyxp/article/details/6922277 一. 完成端口的优点 完成端口会充分利用Windows内核来进行I/O的调度,是用于C/S通信模式中性能最好的网络通信模型,没有之一:甚至连和它性能接近的通信模型都没有. 微软提出完成端口模型的初衷,就是为了解决这种"one-thread-per-client"的缺点的,它充分利用内核对象的调度,只使用少量的几个线程来处理和客户端的所有通信,消除了无谓的线程上下文切换,…
Winsock中提供了一些I/O模型帮助应用程序以异步方式在一个或多个套接字上管理I/O. 这样的I/O模型有六种:阻塞(blocking)模型,选择(select)模型,WSAAsyncSelect模型,WSAEventSelect模型,重叠(overlapped)模型,完成端口(completion port)模型. 选择模型: 目的:允许想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字. 一.select函数             select函数可以确定一个或者多个套接字的状态…
Linux关于并发网络分为Apache模型(Process per Connection (进程连接) ) 和TPC , 还有select模型,以及poll模型(一般是Epoll模型) Select模型极其作用:这文章讲述的很好,没必要重述已有的东西,就直接给链接 http://blog.csdn.net/turkeyzhou/article/details/8609360 我的理解: /* According to POSIX.1-2001 */ #include <sys/select.h>…
原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模式. 今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题. 为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了. 说实话,之所以花了这么…
今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题. 为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了. 说实话,之所以花了这么多时间,很大程度上是由于网上的资料几乎全都是支离破碎.以讹传讹的.既然我已经搞懂了,就花时间整理出来,即方便自己看,也便于大家阅读.相信通过这篇文章,可以解答很多在Windows下搭建PHP开发环境的朋友的…
1. 下载源码:http://dist.libuv.org/dist/ 我下载的是 v1.8.0 版本,打开可看见四个文件,如下: 说明:.tar.gz 版本的是可以在Linux和Windows下编译的源码文件,以 .exe 结尾的是安装文件,Windows下根据自己的需要选择.但是要强调的是,.exe 结尾的程序安装以后在 vs2008 等较低级版本的VS上使用时,虽然可以编译过去,但运行时往往会出现缺少运行时库.这个时候要安装 microsoft visual c++ 2015 RC red…
普及  之  windows下qt的安装及配置   qt介绍 : Qt,分为商业.开源两个版本,商业版需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态库文件.       所以以下介绍开源版本(原因嘛,,自然是因为免费): Qt开发需要安装qt library 和 qt creator    qt library为Qt的程序提供头文件.静态链接库   和动态链接库   qt creator 是用于编程的IDE ,提供GUI界面绘制.代码编写.程序…
本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没有专门提供判断文件是否存在的API,替代的解决方案是使用函数GetFileAttributes,传入一个路径,如果文件不存在,函数会返回INVALID_FILE_ATTRIBUTES,这个时候一般就可以认为文件不存在.更严格一点的,可以在返回INVALID_FILE_ATTRIBUTES之后调用Ge…
网络模型第六讲Select模型 一丶Select模型是什么 以前我们讲过一个迭代模型.就是只服务一个客户端连接.但是实际网络编程中.复杂的很多. 比如一个 C/S架构程序 (客户端/服务端) 客户端很多的情况下.都要连接服务器. 不可能一个服务器只服务一个客户端. 就像现在很火的一款游戏 .PUBG. 绝地求生. 他就是 CS结构程序. 玩的人很多.不可能买了很多很多服务器吧.所以我们就要写模型. 来管理这些客户端的Socket 并对去进行读写操作. 当前 Select模型只针对小网络程序使用.…
Windows下git工具msysGit使用以及Git server初始化 Windows下git工具,这里选择msysGit,版本为msysGit-netinstall-1.8.1.2-preview20130201.因为Git本身是运行在Linux下的,所以要想在Windows环境下使用,必须构建一个与Linux一样的虚拟环境.msysgit是 Git 版本控制系统在 Windows 下的版本,msysGit  作为 Window 平台下的原生程序.所以每一个要连接Git server的wi…
先了解Qt: Qt一直以来,分为商业.开源两个版本,商业版本为用户提供了二级制的动态库,直接安装既可以使用,但是需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态库文件.自从诺基亚公司放弃Meego.遣散Qt开发团队以后,Qt商业版本的网站移到了qt.digia.com,而开源版本则放到了qt-project.org 以下将介绍开源版本的安装. Qt开发,首先要安装Qt library和Qt Creator Qt library为Qt程序提供头文件…
windows下搭建nginx-rtmp服务器 windows下搭建nginx-rtmp服务器 准备工作 安装MinGW 安装Mercurial 安装strawberryperl 安装nasm 下载nginx相关的源码包 编译nginx nginx-rtmp环境搭建 效果测试 最后说明 最近因为接触直播相关的技术工作,使用的也是基于高并发和高性能的nginx,首先需要做的当然是搭建一个nginx服务器. 对于linux上nginx服务器的搭建此处就不再赘述,按照操作指引来的话一般都能顺理成章搭建…
一般情况下,IO操作的行为受两种因素的影响: IO操作对象的类型(阻塞还是非阻塞) 获取IO操作结果的方式(同步还是异步). 同步就是指操作的发起和操作结果的获取由调用者完成. 异步指操作发起由调用方完成,操作结果由服务方主动告知. IO操作一般可以分为4种: 同步阻塞IO :调用方调用IO函数,并阻塞在这个函数上面. 同步非阻塞IO:调用方不断的调用IO函数,直到有”明确”的返回值. 异步阻塞IO:调用方发起IO操作后,阻塞在接收IO通知的API上. 异步非阻塞IO:调用方发起IO操作后继续其…
说明 为何要写这篇文章 ,之前看过阿二的梦想船的<Poco::TCPServer框架解析> http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html 无奈代码太多,看起繁琐.所以 准备 以流程图简化,便于理解.也方便自己以后使用. 本文内容 是基于window api分析的. 本文的poco是1.4.6p4 (2014-04-18)版本的. 虽然现在poco版本是1.6 但调用改动不大. poco下载地址:http:/…
看到一个很有意思的解释: 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系.他们的信会被邮递员投递到他们的信箱里. 这和Socket模型非常类似.下面我就以老陈接收信件为例讲解SocketI/O模型.select模型: 老陈非常想看到女儿的信.以至于他每隔10分钟就下楼检查信箱,看是否有女儿的信,在这种情况下,“下楼检查信箱”然后回到楼上耽误了老陈太多的时间,以至于老陈无法做其他工作. select模型和老陈的这种情况非常相似:周而复始地去检查......如果有数据......接收…
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数.当使用重叠I/O模型时,可以选择使用不同的完成通知方式. 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWa…
1. Linux下的五种I/O模型 阻塞I/O模型: 一直阻塞      应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示. 我们 第一次接触到的网络编程都是从 listen().send().recv()等接口开始的.使用这些接口可以很方便的构建服务器 /客户机的模型. 在调用recv()/recvfrom()函数时,发生在内核中等待数据和复制数据的过程. 当调用recv()函数时,系统首先查…
int select(         int nfds,            //忽略         fd_ser* readfds,    //指向一个套接字集合,用来检测其可读性         fd_set* writefds,   // 指向一个套接字结合,用来检测其可写性         fd_ser* exceptfds, //指向一个套接字集合,用来检测错误         const struct timeval * timeout   //指定此函数等待的最长时间,如果为…
它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程.它的流程如图: 当用户进程调用了select,那么整个进程会被block,而同时,kernel会"监视"所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回.这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程.这个图和blocking IO的图其实并没有太大的不同,事实上,还更差…
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622548.html 锲子:关于并发服务器中的I/O复用实现方式,前面在网络编程系列四还是五来着????我们讲过select的方式,但select的性能比较低,当连接数量超过几百个的时候就很慢了,并不适合以Web服务器端开发为主流的现代开发环境.因此就有了Linux下的epoll,BSD的kqueue,Solaris的/dev/poll和Windows的IOCP等复用技术.本章就来讲讲Lin…