这几天做一个服务器,遇到点问题,请大家帮忙解决。我的服务器接受客户的登录,并在客户登录后记录客户的各种信息,并且将在线的其他客户名,发送给登录的客户;同时在服务器运行过程中,客户的状态会发生变化,这个时候也要将发生变化的客户状态发送给其他的客户。请问我应该使用什么样的数据结构来存储客户信息,是数组、链表还是二叉树...?如何做可以只发送变化的客户信息,而不是所有的客户信息?

解决方案 »

  1.   

    客户信息做成数据库,每个客户端在新登陆或信息变动的时候向服务器发起请求,服务器接收到请求之后,用查询来分辨是新登陆还是后变更(用标志位表示),如果是新登陆则广播到所有客户端,如果是变更,只广播变更部分。变更信息的标志可以在客户端做且只上传变更消息,这样省去了服务器判断变更数据的麻烦。
    例:数据报格式
    1*aaa|4*zhangyan|8*beijing
    这样统一数据报格式,就方便了。不知楼主是否此意。
      

  2.   

    存在数据库里的必要性不大,每次有新的客户登陆,都有服务器来操作
    发给客户端只是简单的报文
    如:
    12人+XX1,XX2....
    每客户端进入服务器,提交,插到链表末尾
           退出,删除该节点       
    利用双向列表,维护头尾指针更方便点
      

  3.   

    应该是个图的结构。用链表应该可以吧,每个结点中包含一个结点指针的vector,用于表示本结点与其它结点的关系。我觉得实际运行时应该不会是NxN次的遍历次数。
      

  4.   

    不会吧?链表的遍历只是O(n),目前最好的大约是log(n),可以这两个复杂度在n<100的情况下,两者没有什么太大的差别.楼主所说的速度问题,其瓶颈大概不在此处,怕是另有问题.一孔之见.
      

  5.   

    我觉得还是链表比较好,如lygfqy(风清扬) ( ) 所说,加一个数组在里面,效率也还可以!