如何提高Socket服务器效率?

quarkfc 2000-07-11 08:03:00
小弟最近课设中设计一个点播视频(mpeg)服务器,
用的是Socket(TCP),小弟实验了CSocket(异步),
sdk Socket,同步的sdk Socket,以及异步sdk socket

我在使用sdk socket时,实验了多线程(给每个Socket开一个线程),
还实验了单线程(即在一个大循环中对所有的SOcket遍历,实验了同步与异步方式),

但效果不尽满意,在10M以太网下当有三个连接时,mpeg1的速度就很快降下来了

而服务器的CPU利用率才6%左右(异步除外),也就是说很多时间都在做无用功。

异步的虽然CPU在狂动,但客户端的图象则蚕不忍肚--极慢,

请问大师门如何提高视频服务器的服务效率啊?



...全文
405 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbi 2000-07-19
  • 打赏
  • 举报
回复
关于IO完成端口的介绍,请参考Jeffrey Richter写的《Advanced Windows,3rd Edition》(中文版叫《Windows高级编程指南》第三版,清华大学出版社出版)。使用IOCP的例子,在MSDN里有。另外,我正在寻找一本书:Jeffrey Richter的《Programming Server-Side Applications for Microsoft Windows 2000》,如果有谁知道的话,请告知。谢谢。
hefeng 2000-07-19
  • 打赏
  • 举报
回复
bird2000,能给我一份CODE 吗?谢谢
jy90@21cn.com
musicbug 2000-07-18
  • 打赏
  • 举报
回复
对了能给我一份Code吗?vc@sina.com
非常感谢
musicbug 2000-07-18
  • 打赏
  • 举报
回复
套接字有一种IO模型,称为完成端口模型。据说有最好的性能。这是我的《Windows网络编程技术》书上说的。这本书在www.huachu.com.cn可以买到。你也可到我的主页musicbug.hongnet.com下载配书源码研究研究。下面是书上的一段:
“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需管理为数众多的套接字,那么应该采用这种模型,往往可以达到最佳的系统性能!但不幸的是该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只有你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线性上升,才应该考虑“完成端口”模型。要记住的一个基本准则是,假如要为Windows NT以及Windows 2000开发高性能的服务器应用,同时希望为大量套接字I/O请求提供服务(Web服务器便是这方面的例子),那么I/O完成端口模型便是最佳的选择!
aifeihuang 2000-07-18
  • 打赏
  • 举报
回复
bird2000,能给我一份CODE 吗?谢谢
aifeihuang@sina.com
bird2000 2000-07-18
  • 打赏
  • 举报
回复
pbi是大拿。我同意其观点。磁盘IO的算法很有讲究。《通信学报》上有很多相关文章。

我就用socket API 作过多线程的服务器程序。每个线程为多个客户服务。
有兴趣的mail我。
pbi 2000-07-17
  • 打赏
  • 举报
回复
要做一个高效的服务器,应该使用多线程模型,但不是对每个客户连接创建一个线程,这样做会浪费资源,而且增加了线程调度的开销。合理的做法是使用一组线程为所有的客户服务,就象商场里由少数的服务员为大量的顾客服务一样,这组线程的具体数目要根据具体的情况而定。Windows NT对编写这类程序提供了支持,就是使用IO完成端口(IOCompletionPort),IIS就是使用这个模型的。
MSDN里有一些关于使用IOCP的技术文章:

MSDN->Technical Articles->Windows Platform->Base Services->Writing Scalable Applications for Windows NT

MSDN->Technical Articles->Windows Platform->Base Services->Writing Windows NT Server Applications in MFC Using I/O Completion Ports

和一些例子:Pop3 sample等。你可以看看。

但服务器的效率不仅与通讯的效率有关,你的程序可能就需要进行大量的磁盘IO,对数据进行缓冲,减少访问磁盘的数量是很有必要的,。
yinyu 2000-07-17
  • 打赏
  • 举报
回复
一定是网络的原因吗?跟磁盘IO等因素没有关系吗?

能给我一份CODE吗?只要关于socket通讯的部分就行
dolaime 2000-07-13
  • 打赏
  • 举报
回复
我对你这个设计很有兴趣,能否EMAIL一分CODE,可以有空时多联系联系!!
期待你的回复!!!!!!!
tomorrowdreamer 2000-07-13
  • 打赏
  • 举报
回复
我对你这个设计很感兴趣,能否EMAIL一份CODE,讨论讨论!!
xingxing 2000-07-13
  • 打赏
  • 举报
回复
对这个问题很感兴趣,给我CODE可以吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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