注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

vc网络编程之一 —— select  

2010-07-01 22:01:28|  分类: 网络服务编程技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天重写了一下非阻塞的网络编程模型的SELECT模型(这个与标准的伯克利的SELECT有些区别),通过对照王艳平老师的例程和原来朋友的例程发现在这个模型下,王老师偷了懒,呵呵,也不能说偷了懒,只是利用了可利用的fd_set集合里的fd_arry[FD_SETSIZE](其实还可以这样说,用一个局部的fd_set 的变量减小了数据的开销,其实作为一个例程,确实不需要做得很复杂,反而让初学者用起来怯场),这里需要注意的是FD_SETSIZE默认定义为64,之所以定义成这个数,主要是考虑程序处理的最佳性能,如果使用单CPU和单线程,可以将其在WINSOCK2.H里定义成256或更大,但原则上不要过千,毕竟是轮询的方式,过多的套接字会影响到你对数据的收发处理。

另外一个要提的是,我手头不可能有几百上千个SOCKET,所以只能采用了另外一种变通的形式,即我绑定了本地的服务器SOCKET的端口不断增长,这样形成N个SOCKET,达到同样的目的,(如果哪位童鞋认为这样做不妥,可以发我邮箱讨论fpcfjf@126.com)。

在这个模型中,发现了一个问题,即对关闭、重连等的处理,(如果要优雅的关闭,请先SHUTDOWN)一定要在closesocket 后,在待检SOCKET集合里,用 FD_CLR清除没用的SOCKET,同样,如果你已经保存了这个套接字,要在保存的集合里进行删除。

经过目前的测试,一般来说,一千个左右的套接字在简单传输时,不会造成数据的丢失,明天会再次进行强度测试。希望能达到两千个左右的SOCKET。

另外说一下,在VS2010中,启动一千个线程操作阻塞的SOCKET没有什么太大的问题,但再多,随着线程栈的开销增大,造成CPU的占用率大幅上升,原则上程序的线程上限控制在二百左右,这样程序才会比较安全。

好了,今天先写到这里,明天再接着,努力!!!

  评论这张
 
阅读(1051)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017