想请教一下在Windows中的网络通信模式,他们的优缺各是什么.
IOCP
重叠模式
select模式
阻塞模式
现在我在我的项目里使用了IOCP但是出了一个这样的问题。
对于单个连接,服务器的处理情况是这样的,当有很多的接收数据包的时候,大概10k/s的接收数据量。向下发送的时候速度是50k/s。过一段时间之后,投递发送的数据包,在完成端口工作线程里将没有回调。当把测试的客户端程序中的发送线程关闭之后,将会看到完成端口的工作线程会回调,而且是接收很多的以前投递的发送数据包的完成事件。我不知道是不是我使用的时候有一些问题。大家有没有遇到过这样的问题。
我有一些朋友说,对于这样的情况,使用IOCP是一种不太好的方案,因为连接数不多,发送的数据包的大小不太大。IOCP方式使用在这一种场景下面根本就没有什么优势可言。使用阻塞的方式将会更加的高效。
以前想起来,IOCP是一个万能的解决方案,其实不是这样。
现在到是感觉到这一些模式的确没有做过一次考量,有经验的朋友能不能讲讲这几种模式下,到底哪一种模式有什么优点,使用在什么场景下会比较的好,比较的合适。