Socket问题基本情况:  1,要建一个基于TCP连接的Server;

  2,总共有40,000个Client,每一个Client都有唯一的身份ID及口令作为建立连接的身份校验;

  3,每个Client都会10分钟左右向Server发送一次200字节的数据;  4,每个Client一旦与Server建立连接便始终保持连接,非意外情况不会断开;  5,这样,平均每秒有67个Client向Server发送数据,Server大部分的工作都是接收并简单处理数据;  6,偶尔,Server需要向特定的某个Client发送数据;  7,偶尔,Server需要向所有Client发送数据;硬件配置(低端服务器):
CPU至强2.8GHz
DDR 1G内存
IDE 80G硬盘求问:
1,这种情况是否使用多线程比较好? 2,若用多线程,Server如何根据Client的ID查找对应的连接并发送数据?好像线程池不支持这种做法,该怎样构建自己的线程管理器?100分先奉上,不够再开贴,希望达人指点~~

解决方案 »

  1.   

    就用线程池,在CLIENT连接上来的时候把他的IP记下,也可在标记个其他的序号。放在LIST里。发送的时候,SENDTO是可以指定发到到哪里。
      

  2.   

    提个问题,Socket只要一连上就一直保持连接状态,就象聊天室哪样,要为每个用户分配带宽,你能支持得住40,000个用户一直在线?
    聊天室可是每个房间只允许200人在线啊
    如果可以保持的话根本不用发送数据了,只要服务器查看连接是否畅通就行了
      

  3.   

    构建类似这样的结构:
    socketlist
    {
       int nCID; //该Client的身份ID;
       String strClinetAddress;//记录下该Client信息;
       int    nClientPort;
    }以此结构建立一个Arraylist.Server发送数据到特定ID的Client时,遍历检查Arraylist,找到nCID=ID的那个,取出地址和端口作为Send的参数。
    -------------------------------------
    这样就可以了吗?不必管它到底哪个线程在处理此事对吧?
    -------------------------------------
      

  4.   

    憨狗 兄说得有理,但不知带宽是如何分配的?每个连接会占用多少带宽呢?带宽是自动平均分配的吗?只有TCP连接而无数据传输时会占用多少带宽呢?
      

  5.   

    本人刚接触Socket编程,希望各位大大不吝赐教~~~偶滴分分会狠狠的砸向各位滴~~
      

  6.   

    使用udp协议吧,使用心跳判断用户是否在线,不用老保持在线啊。那么多用户保持在线,服务器肯定受不了。你是不是打算有40,001个线程呢?
      

  7.   

    1:当Client连接上来的时候,你就记录他的RemoteEndPoint。
    2:你发送的时候,可以用sendto()方法,就可以根据记录的RemoteEndPoint来发送到指定的连接去。
    这回清楚了吧。
      

  8.   

    TO:阿牛,1,这个项目要求数据传输要稳定,尽可能少丢包,所以UPD方式已被领导否决;:(2,不是每个连接都需要一个线程去处理的,一个线程可以几十个或者几百个连接;3,虽然总是保持着连接,但每10分钟才发送一次数据,数据量也不大,只有200字节。这样,矛盾集中在TCP连接本身消耗的系统资源,但不知维持连接到底会消耗多大呢?如何才能测定维护连接所消耗的系统资源呢?
      

  9.   

    总共有40,000个Client,每一个Client都有唯一的身份ID及口令作为建立连接的身份校验;
    ----------------------------------------
    自己写类包装Client,包括Client唯一的身份ID及口令