请各位聊聊关于IOCP with socket(200分)

  • 主题发起人 主题发起人 copy_paste
  • 开始时间 开始时间
C

copy_paste

Unregistered / Unconfirmed
GUEST, unregistred user!
看了softdog一个关于IOCP的贴子,因为对其不熟,所以发个贴请各位聊聊。

呵呵,不好意思打扰softdog的贴子,还是自己发个贴,有请有道高僧。。。
softdog的贴子:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1632139
[:D][:D][:D][:D][:D]
 
问题:上传了一份iocp socket的东东 ( 积分:0, 回复:7, 阅读:45 )
分类:Internet/TCPIP ( 版主:luyear, robertcool )
来自:softdog, 时间:2003-2-19 16:02:00, ID:1632139 [显示:小字体 | 大字体]
http://www.playicq.com/dispdoc.php?t=27&id=3038
很粗糙的,感兴趣的可以看看,没有带例子。

来自:张无忌, 时间:2003-2-19 16:05:00, ID:1632153
???

来自:copy_paste, 时间:2003-2-19 20:14:00, ID:1632729 | 编辑
感觉像在"window网络技术"那个译过来

没做个例子出来?
怎么看Client发个几个字节给Server,难道都是Max_BufferLen之类的?

来自:张无忌, 时间:2003-2-19 20:18:00, ID:1632735
如果要发挥完成端口的优势,那么处理的数据不能太大,把大的包分多次处理,
可以提高效率,发挥串行处理的优势。总之这个里面有很多技巧,需要慢慢把握

来自:copy_paste, 时间:2003-2-19 20:27:00, ID:1632748 | 编辑
张无忌:
简单点说吧,我想发一个文件给server,发文件的过程中,我又想发信息给server,那么
数据包是不是需要定义它自己的协议,这也好办,那即是说每次在客户端发送的数据,按
server端的数据包格式来发送数据否?
IOCP,俺有些概念不是很明白。如果说起比较麻烦,俺再开个贴如何。

来自:copy_paste, 时间:2003-2-19 20:33:00, ID:1632757 | 编辑
倒,没说完,
上面是说,在两个数据包中,是不是说必须定义包的格式,如Signature, data count, data
否则,很难说一个c/s交互中,清楚接受的数据是做些什么。server可以说是无状态的,每
完成一个i/o操作后,它是不管的,虽然可以在对应的socket进行封装成一个类,但也是得
维护它的状态。。。说不太清了。

来自:张无忌, 时间:2003-2-19 20:37:00, ID:1632762
我知道你的意思,这些你可以给没个CLIENT定义一个保存他们信息的结构,
这个结构里有状态变量,通过他你可以控制线程的读写数据的类型,
比如最开始是读的是密码和用户名,如果收到的数据不是这个类型的,
可以关掉这个套接字,,,,

来自:copy_paste, 时间:2003-2-19 20:54:00, ID:1632787 | 编辑
我看了看,它的程序中,是以自己来做Read/Write,但实际情况Server是以触发为主,被动
工作的。那softdog的程序应该不行了吧,GetQueuedCompletionStatus难道会触发?
那也不成那,即使它返回来了,HandleData也是指针,它是每次以NEW的方式得到,完成read/write
后就Free了,那如果client是以主动方式,server是被动方式,那。。。
 
完成端口很复杂,线程没有被FREE掉,他在系统维护的线程池内,
有数据到来,系统会自动进行负荷调整,调用一个没有组塞住的线程
然后就是GetQueuedCompletionStatus和WaitFor***函数类似
 
这个IOCP的东东,可能对它的理解不够吧,所以有些东西,也想不明白。
D6,D7下有一个类似
D:/Program Files/Borland/Delphi7/Source/Internet/ISAPIThreadPool.pas
但只是一个类,也没有谁去调用它,和softdog的程序基本类似,也是Server在
PostQueuedCompletionStatus,感觉只是在保留或者说正在编写这方面的功能。

而它在线程上调用的代码,不管是从哪看到的都是指定了State,而不是以被动地方式来考虑
我就有点想不明白了。像多线程的一对一的方式,每个交互会有生存期,所以很明确其一步步
怎么走的,但IOCP,我现在所看的(有些还没仔细看),包括softdog所写的,都是server主动,
server来send/recv,而不是根据Client的触发,来确定它的一个会话,很不明白。

IOCP找到几个例子,都是VC的,还没仔细地看,呵,没时间,而且程序比较大吧,感觉有些
摸不着头了。
 
你没看明白哪个单句柄数据部分的代码,看懂哪个,做完成端口类的开发就容易多了
 
多人接受答案了。
 
后退
顶部