我的理解完成端口也是使用TCP协议,只是多开了几个监听线程,在客户端和服务器连接上保持连接。UDP是无连接的,为什么大家不用呢?在同一台服务器上,使用TCP协议连接的并发数多呢?还是UDP方式的。我觉得UDP方式的连接要多,因为认证完毕之后就与服务器断开了连接。而TCP一直连接,不断开给其它人连,占用服务器资源应该比UDP多吧!有人说用完成端口模式一台最多2000并发。哪用UDP不止这个数吧!请大家谈谈自己的看法。
调试欢乐多
通俗一点理解completion port 其实是一种线程池线程调度工具. 由操作系统来根据线程池中线程状态决定当前使用哪个线程来完成你的工作.
用UDP的话至少一半的代码在考虑收发数据丢包重发等的处理,怎么判断丢包了就麻烦死你,毕竟发送的每个数据包都有可能丢失,所以用收到回应的方式并不可靠,收不到回应可能是你发送的包丢失了也可能是对方回应收到的那个包丢失了,这里还牵涉到重发造成对方重复收到同一个包时的处理。而用TCP的话就没有这个问题了,只要send成功你就可以认为对方肯定收到了,除非对方已断线,不过对方断线了也能知道。用UDP的话这些都是未知的,必须完全自己写代码来检测。总之用UDP的话必须自己来实现所有TCP保证安全连接的那套检测和重发机制。如果你没被烦死,那么你实现的效率也肯定比不上系统底层,最终效率和资源占用也许比直接用TCP连接还差。因此使用UDP协议进行通讯的使用范围比较狭窄,常用在局域网内部或者对丢包不在乎的应用下。 另外一个常见的使用情况是P2P应用,为了要穿越网关实现不同内网之间的通讯。通常情况下还是使用TCP连接的多。