服务器有64G内存,够不够?可以怎么设计这个聊天室?我的理解是:因为socket肯定是需要存到内存中,所以同时在线的10w个也都需要存到内存中。结果就是我认为这么多数据都需要存内存中。

解决方案 »

  1.   

    10万*200 = 2000万个Socket
    别说64GB,64TB内存估计都不够用
    再说一台机器可用的端口数有限,一般不超过65536个,你这根本创建不了那么多Socket。。另外2000万个Socket这种规模,你想用一台服务器搞定,开什么玩笑?就算内存够用,CPU,磁盘IO,网络IO承受得了2000万个Socket?你当那是超算?超算都不带这样玩的。。
    这种规模都是大型集群服务,而且为了速度,一般还设有很多分布式节点服务器为不同地区的用户导流,通常都有几百甚至上千台各类服务器协同工作最后提醒你一下你确定这是实在的需求,而不是你的美好展望?
    10万个房间,每个房间能容纳200人,也就是理论同时在线可达千万人,这种规模的聊天室,全世界都数得出来有哪些吧
      

  2.   


    人的socket是监听的socket吧,又不是客户端socket,怎么会有2000w个怎么多?
      

  3.   

    完美情况下,可能有10w个,真实情况肯定不会有这么多。我只是想先计算下。我用的websocket。
      

  4.   

    这有点牛叉。计算下一个ChatRoom的所占字节数,比如各个字段的大小,一个chatroom出来了,总的就出来了。
      

  5.   

    如果你用传统IO,一台服务区可能勉强能够支持一两千个socket差不多,用NIO,程序优化的好的话,可能能够支持几千到万把个。当然这只是粗略估算,具体的你要实测一下。具体消耗多少内存,直接用工具实测是比较准确的。
      

  6.   

    内存占用多少与每个Socket占用的缓冲区大小相关,如果是单纯的Socket可以自己指定缓冲区大小,你说的websocket组件不知道有没有这功能。知道了缓冲区大小,你就可以自己计算内存占用了,比如2000W*8KB=160GB。
    为了减少Socket数量,你可以让每个客户端公用一个Socket。
    有足够的内存保持长连接,不代表你的一台服务器能处理多少连接。比如你的服务器只能处理5W次/s交互,而你实际需求可能有10W次/s,那么肯定是不行的。
      

  7.   


    感谢建议,我会去了解下。
    但是客户端怎么公用一个socket呢?每一个用户加入聊谈室都要新建一个socket与服务器连接。能否详细说说?
      

  8.   

    说的很详细,如果没有集群,千万的级别量,你想都别想。现在随便找一个网站,基本上都有集群前期集群,我可以多启动几个服务段程序来接受socket连接
      

  9.   


    恩,一个服务器端程序测了是4000个左右。多开几个服务可以连接更多socket。我怕瓶颈是内存扛不住
      

  10.   

    b/s的webSocket没用过,c/s的话就比较简单。