谈点技术吧,6万人在线每秒实时更新的解决方案
帮客户做了一个解决方案,要求是 6万个用户在线,每1秒他们都能获得实时的信息。
开始想用静态页面做,测试下来,单台服务器IIS每秒处理几千个估计可以的,处理6万个带宽已经爆掉了,带宽估计200M以上。
用Big5、NetScaler,太贵了。20几万以上,钱付得起了,带宽还是不太行。
用TCP连接,6万个TCP连接估计也没啥问题,但是就要考虑多线程,不能一个连接阻塞影响其它连接的处理,处理起来还是挺麻烦的,不小心程序就死掉了。
最后采用了UDP实现,效果非常好,一台服务器就搞定了,大概60M带宽。 UDP的好处是无连接的,服务器发掉就发掉,没有任何负担,程序死掉重启下就行了。
做法:
C/S客户端发一个UDP包给服务器,服务器就知道客户端的IP和端口了,再把实时的信息发给客户端就行了。 客户端可以每N秒发送一个数据包,表明自己活着。
有的时候担心是不是有的公司内网或者家里NAT(路由器什么的)不开UDP端口,一般来说客户端通过NAT先发送一个UDP数据包给服务器,NAT会打开端口,做好映射,这时候服务器向客户端发送UDP数据了,客户端就能收到UDP数据了。
几十万用户测试下来,顶多有10%的机器不支持。因此又提供了一个 Web页面,UDP不通的时候用Web去拿XML数据。
UDP真的很强,什么时候有空打算拿来做个群发器,在家里的电脑上就能给几千个人发消息,突破网络封锁,用来做很多合法或者不合法的事情了...
【代码怎么写?自己研究下好了,实在太简单了,让客户用Java实现的...】
【预告:下次讲讲音视频实时直播的方案,研究了两个月....】