来,菜鸟问题,udp服务器,来看看,感激不尽
本帖最后由 dlfku 于 2012-10-29 20:18:53 编辑 恩,刚学习网络编程,正在做一个windows下的udp服务器,我的想法是这样的,服务器有2个线程,一个网络线程,一个逻辑线程。网络线程专门负责接收客户端发来的数据,这些数据交给逻辑线程处理,(他们之间有个任务队列)逻辑线程处理好了,在交给网络线程,由网络线程发回给客户端。
当然,上面这些不是重点,我的问题是:网络线程中有一个(就一个)socket,就由这一个socket负责收发客户端数据(异步的收和异步的发),如果客户端有几千个,几乎同时发数据过来的话,请问网络线程这一个socket能处理(仅仅是收和发)过来么?
本来想到用一个 socket pool ,由多个socket来做这些事,每一个socket负责一个客户端,可是发现行不通,因为 如果有多个socket的话,他们要绑定至同一个端口(设置address_reuse),那么每个socket的ip肯定要不一样的,这些不一样的ip由程序来生成,这样一来,客户端就不能知道服务器这边的确切ip了,客户端也就没办法向服务器发数据了。
请问是这样吗,有做过的朋友 来给几句建议啊,深表感谢啊
[最优解释]
你的情况不需要多线程吧,用2个线程可能反而会降低效率,直接用select或异步socket都可以。这里有UDP服务器程序,请找MsgSndSrv,DaytimeSrv:
http://download.csdn.net/detail/geoff08zhang/4571358
[其他解释]
听说可以用IOCP
[其他解释]
UDP 是数据报方式,能不能处理过来取决于你处理数据的速度,需要两个线程好一些,一个线程只管收数据,收到就放在队列中,是能处理过来的,没有什么问题。
[其他解释]
UDP是无连接的,一个套接字就可以了。
几千个客户端同时发数据:这个可以用多线程处理
[其他解释]
如果仅仅只是处理一些几乎没有阻塞的业务的话,几千个客户端是绰绰有余
[其他解释]
哥们,我也刚学,估计和你一样混乱。
我的想法是:做一个socket函数,就负责接收,来了数据直接把收到的sockaddr_in类型的客户端地址和msg数据交给一个新的线程。然后线程自己负责再发给客户端就行了。一个UDP,无连接的,随便收了。而且,就是你想公用一个端口也行,用setsockopt函数,就行。
[其他解释]
谢谢你,兄弟 这个到不是我要问的问题
我主要是想知道 如果就一个socket的话 , 能不能应付几千客户端呢?如果不行,有什么解决方案么
[其他解释]