能用UDP尽量用UDP,能不用TCP就不用。TCP要维护连接,错包重发,确认,错序调整等。
消耗比较大。UDP只需要再一个端口上进行IO操作,而TCP则需要再不同的端口上进行IO操作。
假设说用TCP:
案例1:
建立一个同时维持1000个链接的服务器。
先说缺点
1。阻塞模型:
1000个链接需要建立2000个线程去receive和send数据。开销相当大。
2。select模型:
一个线程搞定所有的事情。不过1000个线程,建立FD_SET集的内存开销不说,最重要的是,Select函数本身可能就比较慢,因为要访问所有的socket.其次,select即使返回了,对于1000个socket来说,就要有3000次判断!而此时有可能只有一个socket的某一个FD事件发生!
3。WSAAynSelect模型:
这个WSAAynSelect是异步的,最大的优势是在开销不是很大的情况下可以同时处理多个链接。比select模型节省3000*4字节的内存开销。但是如果同时维护1000个链接,其消息队列的处理速度有可能成为其性能瓶颈。
4。WSAEventSelect模型:
这个模型不进消息队列,处理速度比WSAAsnSelect好。也能同时维护很多链接。但是最多也就是Waifor只能64个,如果要多个的话,需要建立额外的线程。如果1000个链接,那么Waifor将至少建立15个线程。这将是很大的一笔开销。同时由于event与socket进行了绑定,1000个链接必须要求有1000个