为何IOCP能够同时处理成千上万个连接???(20分)

  • 主题发起人 主题发起人 mill666
  • 开始时间 开始时间
鉴定完毕!一群高手和一群无赖的争论.俺来说一下:

建议王府井开一骂街公司.保证生意非常好.^-^(因为贴子里面,一会儿说自己是20岁的学生,一会儿又说自己是什么公司里面的牛人.自己打自己嘴巴.)口口声声说看不起老鸟,却贴了一大堆别人的代码,而实际上他自己有没有写过代码谁也不知道哦."我不想露出来我在驱动开发网的账号,这对VCMFC先生有损,截至昨天我在驱网上回复过4007个帖子。"人家VCMFC连你是谁都不晓得呢.你有没有注册还是个问题吧.你是怕对自己有损吧.---退一万步来说,难道在DFW胡闹和狂操Delphi用户,就不怕对Soul有损?搞Delphi的就贱一些?啥逻辑?"还原软件(远志,小哨兵),防火墙(瑞星的),3721,全国一线品牌的驱动,如果想看的话,我都给你看看,不过你来亲自见我。"我想看,请先生留下联系地址.(估计是不会留下来的,帐号都不敢公开,哪里有脸见人?怕暴露自己的无知)

另外一个更牛."我们这出口12万份的单子作完之后就以制作免费软件为业"这句话实在牛.
啥公司?做过啥产品?

强烈建议王府井之流公开身份.才能作公平之争.俗话说的好:在互联网上,没有人知道你是一条狗.在这点上面,张无忌之流就吃亏了,因为大家都知道他在盛大.可能拉不下面皮说那些无耻的话.呵呵.无忌空有屠龙刀,却也不懂怎么办好.^-^
中国有句话说"是骡是马拉出来溜溜",还有句叫"没有XX就没有发言权".但是我见几位吵的最响的,都没见什么实际的东西."盛名之下,其实难副",如果您老真那么牛,大家都会知道的呢.否则,就别眼红别人啦.
 
我为delphi悲哀,那么长的帖子,全是C++代码.

纯路过.
 
终于风平浪静了。。。[8D]
 
像王府井之类的在大学里见多了,不学无术,吹牛特能。
 
有没有真本来现场考一个
编写BHO的程中有个
procedure DoBeforeNavigate2(const pDisp: IDispatch; var URL,
Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);

这是微软对 BeforeNavigate2 中的Headers解释是
Headers
Value that specifies the additional HTTP headers to send to the server (HTTPURLs only). The headers can specify such things as the action required of the server, the type of data being passed to the server, or a status code.


在DELPHI 7 中怎么读出 HEADERS 的内容来,并修改后写入
 
路过,正在研究这方面的问题
 
看了半天,都是看热闹了,也没看出楼主的疑问怎么解决
 
顶下王府井,有点像树人大侠,逮谁骂谁~~~
 
不同意jingtao这一点:
最明显的是,无论IIS,还是APCHE,都没有直接从驱动层来收发数据的

2003的iiS,就是采用驱动来提高相应速度的。
 
最近也正为IOCP头疼呢,并发处理2000以上的客户端,数据量不大,每个客户端也就100多个字节吧,大家说了N多,也不见人提供相关代码出来,我是三流的吧,以前就用ServerSocket,最近用了indy,就用delphi自己的东西,也算是做技术的吧(我知道这抬举自己了),概念上的我理解的不多,标准一直也是遵循人家的,现在最想得到的是一个切合实际的delphi做的IOCP的DEMO外加详尽的注释,如果这个也没有的话,讨论的结果还是让我们这些小虾米无法接受!
 
何必呢,各自站在自己熟悉的一个角度来说而以。有特定需求的时候,还是要做底层的。

jingtao以前的事情我是知道的,不过最近好象很闲呀,还有时间来这里打嘴仗。
希望那些马甲不是爱元元的哥哥,不然就太恶心了。
 
我在本机测试了一下,我用的是windows xp sp2 连接最多可达到3971个(好像还多点),但到不了4000,不知是怎么回事
 
本贴基本变味了。
 
终于风平浪静了,哈哈!
 
[:D],转一个Http.sys的文章。

http.sys
  IIS 6.0体系设计中最重大的变化是加入了http.sys驱动程序,http.sys驱动程序的任务是处理HTTP请求,而且它在内核模式下执行操作。不要小看这一改变,将处理HTTP请求的任务从IIS 5.0、IIS 4.0的用户模式改变到IIS 6.0的内核模式标志着新一代IIS服务器的诞生。
  
  在Win 2K和NT 4.0中,IIS在用户模式下运行。运行在用户模式下的应用程序不直接与硬件通信,它们直接调用的是一些标准过程,这些标准过程或者将数据传入内核模式的组件(例如网卡驱动程序,图形子系统),或者调用内核模式组件的函数,以此完成保存文件、设置IP地址、将HTML文件发送到网络之类的任务。
  
  用户模式和内核模式之间的转换是一项开销很大的操作,服务器首先从内核模式的TCP/IP栈将传入的HTTP请求传递给用户模式的Winsock,由Winsock将请求传递给IIS。从内核模式到用户模式的切换很快发生,但不可避免地给处理过程带来瞬间的延迟。当负载较大时,这种延迟不断累加,同时由于这种转换是必不可少的,所以管理员根本没有办法优化处理过程。
  
  IIS 6.0的https.sys内核模式驱动程序极大地减少了用户模式和内核模式之间的切换次数。http.sys监听着HTTP请求,决定由哪一个用户模式的进程来处理该请求,或者是否由驱动程序本身返回用户请求的内容。
  
  IIS 6.0在用户模式下运行,完全依赖内核模式的http.sys作为接收用户请求的服务器引擎。因此,http.sys必须能够在任何时候作出相应,必须具有极高的可靠性。用户代码可能导致进程出错,所以微软把http.sys设计成不执行任何用户代码,这样,即使应用程序出现了故障,也不会影响到IIS 6.0本身,IIS 6.0仍能够照常监听HTTP请求。
  
  如果要从内核模式的缓冲区返回静态的应答,一个高速的、内核模式的、不允许运行应用程序代码的HTTP处理器是十分理想的,它减少了切换到用户模式的昂贵开销,能够从内核模式的缓冲区快速返回应答。IIS 6.0的http.sys就管理着这样一个缓冲区,而且使用了高度优化的启发式缓冲区算法来确定哪些内容要放入缓冲区,例如,http.sys可能只缓冲那些出现了一次以上请求的内容。
  
  由于http.sys直接从应答缓冲区提取静态内容,不必再切换到用户模式,所以与IIS 5.0的性能相比,IIS 6.0的整体性能有了显著提升。根据微软的资料显示,WebBench基准测试表明IIS 6.0返回静态内容的速度要比IIS 5.0快150%。即使以IIS 5.0的隔离模式运行IIS 6.0服务器(这时,IIS 6.0的体系结构与IIS 5.0的相似),同样也能从http.sys驱动程序的应答缓冲区和其他改进之处获益。
  
  另外,微软在http.sys驱动程序中采用了许多优化的算法,使其能够将请求直接转发到适当的工作进程。在IIS 4.0和IIS 5.0中,必须通过多个步骤才能确定进程的哪一个实例拥有了应当接收当前请求的Web应用,但在IIS 6.0中,http.sys注册了所有IIS 6.0应用,赋予每一个进程一个句柄,IIS内部利用这些句柄来标识注册的应用程序要用到的一个或多个名称空间。因此,当http.sys接收到一个HTTP请求,它能够很快地将请求从内核模式的http.sys传递到正确的用户模式的Web应用。
  
  http.sys驱动程序还要执行其他一些任务,其中包括:
  ⑴ 将传入的URL与各种长度、格式方面的规则进行比较。
  ⑵ 管理传入请求的队列。
  ⑶ 担负着记录IIS Web网站日志信息的任务(从而提高了记录日志的性能)。
  ⑷ 实施带宽限制策略以及支持TCP/IP级的管理。
  ⑸ 实现客户证书请求服务(但不支持安全套接字层——SSL)。
  
  由于http.sys是一个操作系统的驱动程序,而不是一个IIS组件,因此该驱动程序的配置在注册表而不是IIS配置数据中进行。
 
花了一个小时总算看完帖子了,里面C++的代码没仔细看(功立不够,回头慢慢琢磨).不过就产品而言,无论是驱动也好,应用层的开发也好,能解决问题就行了,用什么方法只是个人喜好和习惯所决定的,没有必要那个一定比另外一个好,也没有必要争论谁的高,把它比作一个大饼,有人擅长这一块,必定也有人擅长另外一块;就技术而言,我觉得我们这些新手应该保持好奇心,对于不明白的技术要多加学习和钻研,没有人能做到万事皆通,总有我们不知道的,要学习的知识在某个地方等着我们去发掘去研究;就人本身而言,讨论技术就尽量围绕技术本身展开,不要出现人身攻击,也不要对别人抱持鄙夷态度,争论是必须的,不过应该从争论中学到转换角度看待问题.套用某电影里面的话:"牌品好就是人品好,牌品不好就是人品不好",通过这句话,我们这些菜鸟有理由相信,"技术好的人一定人品好".

[:D]怕怕的说,我可不想趟这混水惹祸上身,大家还是多给楼主解答一下他的问题吧,不要在无休止的争吵下去了.
 
后退
顶部