现在做一个项目,是网络视频教学的,整个网络模型采用P2P的模式,大概有上千个用户,用一个Communication Server来负责管理所有的客户端连接,在用户登陆的时候,考虑到安全性,于是用TCP协议来发送数据,如果登录成功,返回一些信息之后,Communication Server就可以把该连接断开,把该用户的信息加入到在线列表,其他的数据信息都是用UDP协议来发送,由于要P2P传输,所以Communication Server还要复杂NAT穿透,即UDP打洞.
现在想在Communication Server用IOCP来管理连接,尽管TCP的连接只有在登录的时候使用一下,但是考虑到由于是网络教学,可能在课程开始的前几分钟之内上千个用户会登录,从而服务器会比较繁忙.此后便是UDP打洞的消息也会在短时间之内有上千个,并且考虑到P2P连接中会有节点网络出现问题,所以客户端也会用UDP发送"心跳信息"给Communication Server,以表示自己目前在线.如果在一段时间内,没有接受到"心跳信息"就认为其已经断线.
现在的问题是,Communication Server端既有TCP的连接,又有UDP的连接,怎么使用IOCP来管理呢?网上的例子一般都是用IOCP来管理TCP连接的,是否可以把TCP和UDP的管理结合在一起呢?听说UDP可以不需要IOCP来管理的,那么这种情况下使用什么方法比较好呢?
麻烦各位给一点建议!谢谢!
现在想在Communication Server用IOCP来管理连接,尽管TCP的连接只有在登录的时候使用一下,但是考虑到由于是网络教学,可能在课程开始的前几分钟之内上千个用户会登录,从而服务器会比较繁忙.此后便是UDP打洞的消息也会在短时间之内有上千个,并且考虑到P2P连接中会有节点网络出现问题,所以客户端也会用UDP发送"心跳信息"给Communication Server,以表示自己目前在线.如果在一段时间内,没有接受到"心跳信息"就认为其已经断线.
现在的问题是,Communication Server端既有TCP的连接,又有UDP的连接,怎么使用IOCP来管理呢?网上的例子一般都是用IOCP来管理TCP连接的,是否可以把TCP和UDP的管理结合在一起呢?听说UDP可以不需要IOCP来管理的,那么这种情况下使用什么方法比较好呢?
麻烦各位给一点建议!谢谢!
To: jacklzw88(不可爱咯)
如果用TCP来发送的话,加上丢包重传机制,那样就会延时很大啊,而且该系统还有一个忘了说的功能就是教学的过程中,在线听课的人可以随时向讲师提问,如果延时过大,提问根本就得不到保证了.
To:unsigned(僵哥(为什么我会到这里来……))
你的意思是不是开两个处理线程,一个用于处理TCP,一个处理UDP吗?
------------------------------------
应该说是两组职能的线程,最好是两个线程池,当然IOCP本身自行成一个线程池.
用UDP的话,那么Per-Handle 结构里面应该怎么定义,那个一般有的socket成员怎么处理?因为udp的话服务器接不到socket啊.
另外,看书上都说IOCP可以维持数百上千个socket连接,但是一般都不是用于维持心跳这种信息的,他们的也许没有心跳这么多的数据接收操作,但是我用来维持心跳信息的话,数据接受比较频繁,是否可以呢?麻烦高手指点一下,第一次用IOCP,问题比较多.