最近在写一个企业内使用的专属FTP服务端程序。参考了一些资料,好像并没有说用哪种Winsock的IO模式更好。听说"完成端口"的效率较高,而且适合大量连接,服务器应用。那么是否适用于FTP服务器应用呢?在此请教各位!另外可有人知道像Serv-U采用哪种IO模式
用完成端口也可以,另外你可以参考 FileZilla 的源码,做得不错的开源项目
Cybergate你什么意思?我不明白你到底懂不懂,怎么到处跟我较劲,请你这位懂的扯扯看.
事实就是如此,用任何一种IO模型都可以实现ftp,完成端口效率是比较高,适合用在大量连接的情况下,但事实上,ftp的实现主要瓶颈不是在Socket IO上,是在File IO上.怎么优化文件缓冲才是重点.
你说我不懂我可以理解,比我高的人很多很多,在他们面前我的确是什么也不懂,但是你说我乱扯,我不明白你的意思,我哪里扯错了,请你指出来,请你扯出对的来.
大家在这里都是讨论问题,请你先端正自己的态度.
首先支持一下gengyong(浮尘).
完成端口显然适用于楼主的情况, 不过完成端口并不是容易使用的, 要注意开发效率
可以在codeproject找到很多相关的实例
说说我的理解
一、不能简单地说瓶颈在Socket IO还是File IO上。有很多因素决定。
1、磁盘吞吐率跟网络带宽的比例,如果你只有10Mbps的出口带宽,FILE IO永远不是问题。
2、磁盘寻道时间,这个往往更加重要,因为同时处理很多请求不可避免引起磁头的频繁移动。
3、磁盘缓冲,为了尽量减少磁头移动次数,应该提供足够的磁盘缓冲。这个过程可以交给操作系统处理,也可以由你自己来管理用户级缓冲。例如,某个SOCKET需要发送1kb文件数据的时候,先对这个文件预读128kb。同时,利用Critical Section等机制不允许其他socket的磁盘读写来干扰这个预读的过程。
二、完成端口不能解决Socket IO和File IO的瓶颈,它只能减少内核态和用户态的切换次数,从而降低线程启动的开销。对于HTTP服务、网络游戏等应用,一般一次数据传送时间非常短,而连接数量非常多,完成端口是个不错的选择。但是对于FTP服务,大文件传输比较多,而且连接用户比较少,没必要用完成端口。而且ftp采用CR/LF来分割命令,会给完成端口的使用造成很大的困难