首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

大讨论 服务器并发处理解决思路

2012-01-31 
大讨论 服务器并发处理前提:UDP服务器,就一台PC.双核CPU,暂时先不考虑可靠性。请大家各抒己见!我目前想到最

大讨论 服务器并发处理
前提:UDP服务器,就一台PC.双核CPU,暂时先不考虑可靠性。

请大家各抒己见!

我目前想到最好的是: 阻塞UDP方式, 1-2个接收者线程专门接收客户数据。 1个缓存队列专门临时存放用户数据。 10-500个处理者线程专门用来处理用户数据并将处理后的数据返还给客户端。这种模型可以用于windows和linux

[解决办法]

探讨
觉得楼主的方法不错了,我以前也是这样处理的。唯一不同的是我开了不少处理线程,每个线程抢锁来recvfrom

[解决办法]
在另外一个帖子回复了,楼主 可以去看看

个人觉得,楼主误认为并发只跟accept相关

另外socket的底层实现也可以再了解了解
[解决办法]
探讨
500个客户端还行吧!!压力可以顶得住!!!

[解决办法]
我用的方法是一个服务器socket来处理所有的UDP客户端的请求,

UDP不同于TCP,
TCP可以为每个客户端连接分配一个socket;

但是UDP我试过,
如果服务器用多个socket和UDP客户端“连接”进行数据传输的话,
在局域网没有问题,
但是一旦服务器和客户端不在同一个内网,
这种模式就无法进行。
这时,服务器发送到UDP客户端的数据根本无法送达UDP客户端,
可能是服务器所在的网络的网关映射问题。
[解决办法]
只是考虑效率是不行的,这里边丢包,乱序等问题才是要重点考虑的。I/o select方式效率是比较高的。
[解决办法]
lz的模式我一直在用,呵呵,都是局域网内的,通信过程没发生什么问题,因此是可行的。

不过如果要是服务器和客户端在两个不同的网络的话,建议得增加代理。

上面说过的粘包,乱序的问题,或许是我发送的数据量较小,所以没发现,建议楼主注意点
[解决办法]
把简单的问题复杂化了,
udp接入服务,用最简单的方式,一个进程,一个套接字,select,轻轻松松支持2W/S请求。
tcp接入服务,入门知识在C10K上已经有详细介绍。
[解决办法]
直接线程池吧!CPU核数*2+2个线程!
[解决办法]
提醒一下,在考虑服务器的性能的时候,请考虑你的运行环境:
比如:
网卡是10M 100M 还是1000m?
cpu是什么? 赛扬还是至强?
内存是256m还是16G?
等等等等....

再好的设计也要和你的硬件环境相匹配.

to:lilinfeng124
你得想想这个硬件环境问题.
当然,你的设计方法不能说很好,但是也不是很差.

io处理优化上面,有个小巧的libevent库, 性能很不错, 你可以参看一下.
c++里面ACE和boost都不错,但是学习曲线有点高.

热点排行