上千了就不要采用多线程的同步socket了,改用异步socket发送吧。
其实才几千个目标地址,tcp应该也能搞定的吧,记得用iocp的话达到上万的并发数也不是太难的。
开十个线程专门负责发不就行了,线程依次标记为1到9。你要发给谁,然后你直接把socket句柄以及需要发送的数据包,随机生成一个0到9之间的随机数,然后就塞到这个对应的线程的消息队列里面,让他去发呗。很简单的事情,如果你觉得C#的不放心,自己弄C++写,异步重叠就行了,不过原理还是按照上面的。当然这里最后到底是10个线程还是多少个,看你需求场景了。如果你搞不定的话,外包给我,性能参数给我,只要别整太变态的性能参数,如十万个客户端,0.5s延迟发光一个数据包有1M的文件,那我就没辙了
LS兄弟只回答了部分问题。我查阅了相关资料,对于UDP发送端而言,由于一般情况下只是单网卡的主机,就算多Socket异步发送,数据还是排队一份一份出去,反而损耗了线程切换的时间。对于网络通信而言,几百几千个瞬时发送量对单个Socket来说并没什么负担。若用的是TCP连接,则可能需要等待客户端响应,为了防止单个连接阻塞后续通信,可以使用多Socket异步通信。
再挂一段时间,没其它观点的话就结贴!