我的理解完成端口也是使用TCP协议,只是多开了几个监听线程,在客户端和服务器连接上保持连接。UDP是无连接的,为什么大家不用呢?在同一台服务器上,使用TCP协议连接的并发数多呢?还是UDP方式的。我觉得UDP方式的连接要多,因为认证完毕之后就与服务器断开了连接。而TCP一直连接,不断开给其它人连,占用服务器资源应该比UDP多吧!有人说用完成端口模式一台最多2000并发。哪用UDP不止这个数吧!请大家谈谈自己的看法。

解决方案 »

  1.   

    Completion port 和 socket可是完全不同的两个概念, 不要搞混了. 尽管在中文翻译下他们都叫"端口"
    通俗一点理解completion port 其实是一种线程池线程调度工具. 由操作系统来根据线程池中线程状态决定当前使用哪个线程来完成你的工作.
      

  2.   

    转贴自 http://dev.csdn.net/article/48/48622.shtmI/O完成端口是一种机制,通过这个机制,应用程序在启动时会首先创建一个线程池,然后该应用程序使用线程池处理异步I/O请求。这些线程被创建的唯一目的就是用于处理I/O请求。对于处理大量并发异步I/O请求的应用程序来说,相比于在I/O请求发生时创建线程来说,使用完成端口(s)它就可以做的更快且更有效率。
      

  3.   

    udp还不是可以线程处理这些连接。UDP连接完毕后马上就断开了。把资源给其它人用,应该更好些吧。
      

  4.   

    udp编程比较麻烦,你试过就知道了。
    用UDP的话至少一半的代码在考虑收发数据丢包重发等的处理,怎么判断丢包了就麻烦死你,毕竟发送的每个数据包都有可能丢失,所以用收到回应的方式并不可靠,收不到回应可能是你发送的包丢失了也可能是对方回应收到的那个包丢失了,这里还牵涉到重发造成对方重复收到同一个包时的处理。而用TCP的话就没有这个问题了,只要send成功你就可以认为对方肯定收到了,除非对方已断线,不过对方断线了也能知道。用UDP的话这些都是未知的,必须完全自己写代码来检测。总之用UDP的话必须自己来实现所有TCP保证安全连接的那套检测和重发机制。如果你没被烦死,那么你实现的效率也肯定比不上系统底层,最终效率和资源占用也许比直接用TCP连接还差。因此使用UDP协议进行通讯的使用范围比较狭窄,常用在局域网内部或者对丢包不在乎的应用下。 另外一个常见的使用情况是P2P应用,为了要穿越网关实现不同内网之间的通讯。通常情况下还是使用TCP连接的多。
      

  5.   

    哪么同一台机器TCP最大能达多少并发?(服务器还要中转语音视频流)
      

  6.   

    UDP只负责发送,不负责包的否发送成功管理,TCP有发送管理机制