5万人同时在线,在不同的房间里聊天
1. 就算用IOCP单台SERVER,也不过承受几千的并发量而已.
2. 5万人同时在线,只不过是服务器端保持5万人在线的记录(数据)而已.并不是一台
SERVER连接5万用户.
3. 5万用户,一台登录服务器就算用IOCP模型也承受不了. 登录服务器肯定是集群.
4. 既然是聊天室, UDP的广播肯定是少不了的. 合理的划分房间的大小, 是网络性能的关
键.
5. 用户之间的密聊,和文件收发, 肯定是用P2P比较合适, 不占用服务器端资源.
6. 多台登录服务器的处理问题, 服务器端需要一定数量的登录服务器, 大厅服务器,房
间服务器. 服务器肯定是用集群的模式. 不要想着单一一台,二台就OK的.
7. 负载均衡是少不了的. 如何减轻每台SERVER的压力,方法有多种的, 最简单的办法就是
注册.固定的用户,分配固定的服务器为他处理.
8. 海量数据问题, 如果需要保存记录. 就会有海量数据问题. 分布式数据库是必须要的.
一二台数据库根本承受不了, 把用户信息,分散到不同的数据库中存放.
9. 再强调一点,登录集群服务器一般采用IOCP模型, 处理完用户登录之后,就会断开用户
连接.只保留用户的Session. 大厅服务器, 房间服务器,可能也会有多台SERVER完成.
大厅服务器也只是保留用户在线信息而已.并不和用户连接. 真正和用户连接的可能只
是一个房间服务器, 或者房间服务器的的代理服务器.这个服务器需要用IOCP模型,处
理用户大量的并发数据. 但经过层层的细分之后, 把百万大军,已经化整为零. 以排,
连为单位. 各伺其职, 有事向上级(服务器)反映.
10. 如此多的用户,注定了不可能为每个用户分配一个线程, IOCP的线程池. 也只是其收
发数据作用. 所有数据,一律进入堆栈. 所有数据,一律进入出堆栈. 由不同的线程去
完成. 所有的数据处理, 放在一起处理. 整个系统看上去, 有几道流水线同时作业
同时工作. 互相响应.
11. 程序就象一个忙碌的国家, 忙而不乱.各伺其职, 井井有条.
说了,也是空话, 看源码最能说明问题, 对分布式系统感兴趣的,可以加我聊聊.