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个客户端 最好用组播吧