I'm coding a client-server communication.The client is asking something to the server and then the server is responding every few ms (50 in my problem case).
I'm using a TcpClient to connect the client and the server, and using BinaryWriter/Reader to write and read on the TcpClient stream (networkstream).
I send ~100 ko of data every 50 ms (I try to, in fact), which is ~2000 mo / s. Client and server are connected with a rj45 wire and client firewall is disabled.
My problem is that the BinaryWriter.Write(myString) takes a minimum of 5 ms and a maximum of 2500 ms. So I tried to increase TcpClient Send/ReceiveBufferSize to 20MB (default is 8MB) and NoDelay = true, it's a bit better than before (was taking up to 5 seconds before that) but not that good yet.
The fact the writing is so irregular made me think the buffer is full and the BinaryWriter is waiting for it to empty a bit so on the client side I execute ReadString on the stream then process data in a thread but the problem is still there.
Code:
Server side:
private void traitementEnvois()
{
while (true)
{
//some processing and wait for data to send
NetworkStream stream = Client.GetStream();
using (BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8, true))
{
while (!_envoisATraiter.IsEmpty) //ConcurrentQueue for data to send
{
String jsonAEnvoyer;
_envoisATraiter.TryDequeue(out jsonAEnvoyer);
if (jsonAEnvoyer != null)
{
Stopwatch chrono = new Stopwatch();
chrono.Start();
writer.Write(jsonAEnvoyer);
long elaspedMs = chrono.ElapsedMilliseconds;
chrono.Stop();
EcritureEvenement.loggerEvenement("written in " + elaspedMs, TypesEvenements.DEBUG, "EnvoiParClient.traitementEnvois"); //log the event
}
}
}
}
}
Client side:
private void traitementStreamServeur(TcpClient server)
{
NetworkStream stream = server.GetStream();
BinaryReader reader = new BinaryReader(stream);
while (true)
{
if (stream.DataAvailable)
{
String messageJson = reader.ReadString(); //read data from the stream
new Thread(() => traiterMessageRecu(messageJson)).Start(); //process data
}
else
{
Thread.Sleep(10);
}
}
}
Typical log:
DEBUG 04-23-2014 14:18:50.332 written in 9 ms
DEBUG 04-23-2014 14:18:50.485 written in 8 ms
DEBUG 04-23-2014 14:18:50.658 written in 9 ms
DEBUG 04-23-2014 14:18:50.816 written in 6 ms
DEBUG 04-23-2014 14:18:51.009 written in 4 ms
DEBUG 04-23-2014 14:18:51.153 written in 24 ms
DEBUG 04-23-2014 14:18:51.305 written in 4 ms
DEBUG 04-23-2014 14:18:51.456 written in 9 ms
DEBUG 04-23-2014 14:18:51.638 written in 14 ms
DEBUG 04-23-2014 14:18:51.797 written in 62 ms
DEBUG 04-23-2014 14:18:51.955 written in 63 ms
DEBUG 04-23-2014 14:18:52.066 written in 13 ms
DEBUG 04-23-2014 14:18:52.309 written in 77 ms
DEBUG 04-23-2014 14:18:52.508 written in 58 ms
DEBUG 04-23-2014 14:18:52.643 written in 81 ms
DEBUG 04-23-2014 14:18:52.750 written in 18 ms
DEBUG 04-23-2014 14:18:53.007 written in 108 ms
DEBUG 04-23-2014 14:18:53.201 written in 124 ms
DEBUG 04-23-2014 14:18:53.300 written in 27 ms
DEBUG 04-23-2014 14:18:53.477 written in 49 ms
DEBUG 04-23-2014 14:18:53.615 written in 56 ms
DEBUG 04-23-2014 14:18:53.871 written in 129 ms
DEBUG 04-23-2014 14:18:53.922 written in 36 ms
DEBUG 04-23-2014 14:18:54.196 written in 121 ms
DEBUG 04-23-2014 14:18:54.361 written in 101 ms
DEBUG 04-23-2014 14:18:54.580 written in 148 ms
DEBUG 04-23-2014 14:18:54.773 written in 154 ms
DEBUG 04-23-2014 14:18:54.784 written in 11 ms
DEBUG 04-23-2014 14:18:55.077 written in 103 ms
DEBUG 04-23-2014 14:18:55.327 written in 192 ms
DEBUG 04-23-2014 14:18:55.475 written in 147 ms
DEBUG 04-23-2014 14:18:55.501 written in 25 ms
DEBUG 04-23-2014 14:18:55.703 written in 92 ms
DEBUG 04-23-2014 14:18:56.326 written in 578 ms
DEBUG 04-23-2014 14:18:56.953 written in 626 ms
DEBUG 04-23-2014 14:18:57.400 written in 447 ms
DEBUG 04-23-2014 14:18:58.049 written in 648 ms
DEBUG 04-23-2014 14:18:58.238 written in 189 ms
DEBUG 04-23-2014 14:18:58.952 written in 713 ms
DEBUG 04-23-2014 14:18:59.646 written in 694 ms
DEBUG 04-23-2014 14:18:59.995 written in 348 ms
DEBUG 04-23-2014 14:19:00.518 written in 523 ms
DEBUG 04-23-2014 14:19:01.350 written in 831 ms
DEBUG 04-23-2014 14:19:01.620 written in 270 ms
DEBUG 04-23-2014 14:19:02.220 written in 599 ms
DEBUG 04-23-2014 14:19:02.516 written in 295 ms
DEBUG 04-23-2014 14:19:02.689 written in 172 ms
DEBUG 04-23-2014 14:19:02.880 written in 191 ms
DEBUG 04-23-2014 14:19:04.308 written in 1427 ms
DEBUG 04-23-2014 14:19:04.331 written in 23 ms
DEBUG 04-23-2014 14:19:04.345 written in 13 ms
DEBUG 04-23-2014 14:19:04.351 written in 6 ms
DEBUG 04-23-2014 14:19:04.370 written in 18 ms
DEBUG 04-23-2014 14:19:04.477 written in 107 ms
DEBUG 04-23-2014 14:19:05.553 written in 1075 ms
DEBUG 04-23-2014 14:19:06.903 written in 1350 ms
DEBUG 04-23-2014 14:19:07.168 written in 264 ms
DEBUG 04-23-2014 14:19:07.565 written in 396 ms
DEBUG 04-23-2014 14:19:09.073 written in 1507 ms
DEBUG 04-23-2014 14:19:09.934 written in 861 ms
DEBUG 04-23-2014 14:19:10.676 written in 742 ms
DEBUG 04-23-2014 14:19:11.794 written in 1118 ms
DEBUG 04-23-2014 14:19:12.247 written in 452 ms
DEBUG 04-23-2014 14:19:13.171 written in 924 ms
DEBUG 04-23-2014 14:19:13.514 written in 342 ms
DEBUG 04-23-2014 14:19:13.779 written in 265 ms
DEBUG 04-23-2014 14:19:14.762 written in 983 ms
DEBUG 04-23-2014 14:19:14.799 written in 36 ms
DEBUG 04-23-2014 14:19:16.525 written in 1726 ms
DEBUG 04-23-2014 14:19:17.029 written in 503 ms
DEBUG 04-23-2014 14:19:17.545 written in 515 ms
DEBUG 04-23-2014 14:19:17.624 written in 79 ms
DEBUG 04-23-2014 14:19:17.959 written in 335 ms
DEBUG 04-23-2014 14:19:18.864 written in 904 ms
DEBUG 04-23-2014 14:19:20.285 written in 1420 ms
DEBUG 04-23-2014 14:19:20.307 written in 21 ms
DEBUG 04-23-2014 14:19:20.359 written in 52 ms
DEBUG 04-23-2014 14:19:20.722 written in 363 ms
DEBUG 04-23-2014 14:19:21.172 written in 449 ms
DEBUG 04-23-2014 14:19:21.824 written in 652 ms
DEBUG 04-23-2014 14:19:22.000 written in 176 ms
DEBUG 04-23-2014 14:19:22.499 written in 498 ms
DEBUG 04-23-2014 14:19:23.368 written in 869 ms
DEBUG 04-23-2014 14:19:23.773 written in 404 ms
DEBUG 04-23-2014 14:19:24.835 written in 1062 ms
DEBUG 04-23-2014 14:19:24.927 written in 91 ms
DEBUG 04-23-2014 14:19:24.995 written in 68 ms
DEBUG 04-23-2014 14:19:25.514 written in 518 ms
DEBUG 04-23-2014 14:19:27.232 written in 1718 ms