有做过文件传输的么

crystal_dark 2011-01-24 11:24:46
多个客户端的文件同时上传到服务器,服务器的CPU占用率很高,这一般怎么处理?服务器端使用的是WSAAsynSelect模型
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Torch009 2011-01-24
  • 打赏
  • 举报
回复
估计你在不该用的地方用了while
jwybobo2007 2011-01-24
  • 打赏
  • 举报
回复
那些客户端都在拼命的给你发数据,而你在拼命的接收,可能还在同时写文件,这是CPU高的主要原因。

通过更换模型不能很好的解决,你应该通过控制客户端上传数据的流量来处理,也就是说不让客户端给你拼命发送数据,一种是客户端本身计算通信量,然后通过定时器等等来统计流量,并控制发送频率,发送多了则休息几十毫秒;另一中是服务端控制流量,一旦发现单位时间统计的流量大于多少,就休息几十毫秒再接收数据。
上面说的是传输方面的资源节约方式。接下来就是减少写磁盘次数来达到降低CPU的目的,你可以定义比较大的一块接收缓冲区,如64K,每次收到数据就偏移指针,当缓冲区满再写磁盘。或者另外定义缓冲区,把接收到的数据给它,当它被填满则写文件。
xgPaul 2011-01-24
  • 打赏
  • 举报
回复
客户端数如果不多的话,可以考虑在传文件时一个客户对应一条线程,文件传完后关闭线程。。。
bragi523 2011-01-24
  • 打赏
  • 举报
回复
直接用个FTP服务器不行吗?
chenyu2202863 2011-01-24
  • 打赏
  • 举报
回复
服务端放弃使用这个模型

这个还要使用到窗口消息,烦躁!
直接用select吧
nicklisir 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenyu2202863 的回复:]
服务端放弃使用这个模型

这个还要使用到窗口消息,烦躁!
直接用select吧
[/Quote]
+++,虽然没做过,但是我同意这观点。。。。
翅膀又硬了 2011-01-24
  • 打赏
  • 举报
回复
把收到的数据缓存一下,攒够一定数量再写一次。试试

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧