要求:
1 建立一个基于TCP的服务器
2 多个客户端连接到服务器
3 每个客户端可以显示有哪些客户端已经连接并空闲
4 客户端可以选择和哪一个其他的客户端进行通信目前做法:
1 服务器将每个连接到服务器的客户端的Socket号存入CMAP,并向所有连接到服务器的客户端广播这个Socket号,例如,client1连到server,则通过所有已连接的client的Socket号,向所有client发送client1 的Socket ID1;
2 如果client2选择和client1通信,则client2先与server进行信令交换,发给server的信令包中包含socket ID1;server收到该信令后向client1询问是否与client2建立连接,假设client1同意;
3 在server中建立client1与client2的映射关系,用CMAP做;
4 创建了一个IOCP端口,在GetQueuedCompletionStatus后的处理线程中,每次收到包以后,都检索其SocketID,然后在CMAP中找到对应的目的Socket ID,发包。觉得,服务器的性能不高,因为每次都要检索SocketID,而且还要跑协商信令,比较难处理啊,不知道还有没有别的好一点的方式???

解决方案 »

  1.   

    检索目的socket句柄是避免不了的吧。我觉得这样设计就可以
      

  2.   

    应该允许客户端之间的UDP通讯,传输一些不是很重要的数据,这样可以减轻服务器的压力,提高效率。
      

  3.   

    我们想用TCP传音频和视频,用UDP的话,经常通不了,所以没办法啊
      

  4.   

    TCP做聊天服务器,似乎是不正确的选择。
      

  5.   

    csuxiong(大熊) ( ) 
       
    我们想用TCP传音频和视频,用UDP的话,经常通不了,所以没办法啊  
     
    我认为这样做不好
    尤其在网络状况不好的情况下
    在udp通不了的情况下
    tcp若能通的代价是长时间的等待
    实际效果就是说一句话要等很长时间才能听到
      

  6.   

    csuxiong(大熊) ( ) 
       
    我们想用TCP传音频和视频,用UDP的话,经常通不了,所以没办法啊  
     
    我认为这样做不好
    尤其在网络状况不好的情况下
    在udp通不了的情况下
    tcp若能通的代价是长时间的等待
    实际效果就是说一句话要等很长时间才能听到
      

  7.   

    但是好像国内很多地方都封了UDP,那如何是好?我看skype的数据包也是基于TCP的
      

  8.   

    tcp服务器并不是不可取
    但它存在一个最大sockets数量问题
    操作系统能够同时接受的连接sockets数量是有上限的