日期:2014-05-18  浏览次数:20950 次

tcp ip 通信 一个服务端向多个客户端(1000个)发送数据
socket通信 一个服务端向多个客户端(1000个)发送数据 ,服务端每秒钟向客户端发送数据,怎么样能使客户端同时接收到的数据,即第一个客户端 和最后一个客户端接收到的数据的时间不能相关太大,控制在1秒内。

现在出现的情况是它们相关几十秒。
代码如下:
server:
 while(True){
  TcpClient client = listener.AcceptTcpClient();
  Console.WriteLine("Client connected:{0}<--{1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
  RemoteClient remoteClient = new RemoteClient(client);



RemoteClient :
 public RemoteClient(TcpClient client)
  {
  this.client = client;

  remoteStream = client.GetStream();
  buffer = new byte[bufferSize];
  bufferSendToClient = new byte[bufferSize];  
   
  Thread thread = new Thread(SendMessageToClient);
  thread.IsBackground = true;
  thread.Start();



client:


 for (int i = 0; i < 1000; i++)
  {
  int clientId = i + 1;
  ClientToServer client = new ClientToServer();
   
}

ClientToServer :
在这里是异步读取服务端发过来的数据。





------解决方案--------------------
为什么不采UDP的方式,然后使用组播?
------解决方案--------------------
你测试的时候所谓的 for (int i = 0; i < 1000; i++) 这段就应该是并发的,怎么能够顺序呢?

就算人家超市给你开了1000个收银台并行打发顾客,可是你这1000个顾客硬要排成一队而且一个顾客购物完毕下一个顾客才进入超市,这不就是悲催的顾客(client)嘛。
------解决方案--------------------
在局域网内测试下速度,如果相差无几,可能是网络问题~
------解决方案--------------------
我从来不使用TPL,这是有实际的测试和正式的使用经验,TPL慢的不适应半点。而且它变成几乎是一点也没有精简。

正常地使用传统的线程(或者调用系统线程池)代码,远离TPL。
------解决方案--------------------
1000个客户端 最好用组播吧