📄 subject_63562.htm
字号:
<p>
序号:63562 发表者:su_37 发表日期:2003-12-04 15:52:59
<br>主题:求救,急!(关于I/O模型)
<br>内容:我现在要做一个程序,在某台机器上有很多个连接,有些是我CONNECT,而有的是我LISTEN。我该采用什么I/O模型,原因!!<BR><BR><BR>谢谢帮忙啊!!!!!!!!!!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:zzjhsj 回复日期:2003-12-04 17:20:18
<br>内容:I/O Completion Ports
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-04 17:27:38
<br>内容:一定要用完成端口吗??我认为我的连接还没到达需要用完成端口的数目啊!<BR><BR>用WSAEVENTSELECT怎么样?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:badboy 回复日期:2003-12-04 17:30:05
<br>内容: 关注!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-04 17:53:17
<br>内容:我现在考虑的是使用多线程和多种I/O模型混用的方式。即我CONNECT的用WSAEVENTSELECT而在我LISTEN的时候用WSAASYNCSELECT模型。<BR><BR>不知道谁有更好点的解决方案!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-04 21:46:17
<br>内容:如果不超过64个,可以都用wsaeventselect。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-05 08:19:51
<br>内容:只用一个WSAEVENTSELECT就可以达到目的吗???
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:BigJames 回复日期:2003-12-05 09:04:19
<br>内容:可以。比如你有3个socket,一个Listen,一个read,还有一个write。<BR>对第一个监听他的FD_CONNECT,对第二个监听FD_READ,第三个FD_WRITE。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-05 14:37:14
<br>内容:在这中模式下如何并发处理来自不同计算机的数据呢??<BR>还有我的程序中和有几台计算机之间的连接不能断,如何处理呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-05 14:44:03
<br>内容:如果单个处理需要化很长时间,就是用线程来处理每一个任务,否则就可以在主进程/线程直接处理完毕,再进入wait。<BR>连接不能断?socket不关闭就可以呀,不需要什么特殊处理的。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-05 15:12:41
<br>内容:如果单个处理需要化很长时间,就是用线程来处理每一个任务,否则就可以在主进程/线程直接处理完毕,再进入wait。<BR><BR>如果这样那我不是要建很多线程来处理每一个任务吗??
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-05 15:58:17
<br>内容:对啊,要并发处理,就得起线程阿,除非其它客户连接可以等当前任务完成再处理。<BR>当某一个任务正在被线程处理时,可以用wsaeventselect清除对它的监视,等到处理完后,再监视他
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-05 16:23:53
<br>内容:你的意思是当线程建立以后就不再监视他的消息,而是让线程自己去完成收发工作吗??
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-05 17:18:39
<br>内容:你的理解不完全对。<BR>我是说,当你从一个客户端连接收到一次数据后,启动一个线程去处理这次数据。在处理期间,应当不监视从这个客户端连接,当线程处理完,再重新开始监视这个客户端连接。<BR>之所以这样做,是因为通常的数据传输过程有一定的依赖关系,比如从某一个客户端先后有两次数据到达,第一个要求增加纪录X,而第二个要求删除他,那么服务器就需要保证第一次数据处理完毕之后,才能开始处理第二个。如果第一个请求正在线程里执行时,又把第二次请求放到线程里处理,就无法保证他们的先后次序。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-05 17:47:23
<br>内容:哦!这样的啊!那我出现紧急数据,必须马上处理的时候又怎么办呢??
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-05 18:27:58
<br>内容:紧急数据是指OOB数据吗?<BR><BR>其实,如果每一次数据处理的时间不是太长的话(比如20-30ms),完全可以等待上一次数据处理结束,再处理下一次数据。等一会也不会死人吧!//xixi
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:su_37 回复日期:2003-12-10 09:36:28
<br>内容:呵呵!我UP!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -