【发布时间】:2014-06-08 06:53:19
【问题描述】:
我正在编写客户端-服务器通信。客户端向服务器询问一些内容,然后服务器每隔几毫秒响应一次(在我的问题案例中为 50)。
我正在使用 TcpClient 连接客户端和服务器,并使用 BinaryWriter/Reader 在 TcpClient 流(网络流)上进行写入和读取。
我每 50 毫秒发送约 100 ko 数据(实际上我尝试发送),即约 2000 个月/秒。客户端和服务器通过 rj45 线连接,客户端防火墙被禁用。
我的问题是 BinaryWriter.Write(myString) 最少需要 5 毫秒,最多需要 2500 毫秒。所以我尝试将 TcpClient Send/ReceiveBufferSize 增加到 20MB(默认为 8MB)和 NoDelay = true,这比以前好一点(之前最多需要 5 秒),但还没有那么好。
写入是如此不规则的事实让我认为缓冲区已满,BinaryWriter 正在等待它清空一点所以在客户端我在流上执行 ReadString 然后在线程中处理数据但问题仍然存在在那里。
代码:
服务器端:
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
}
}
}
}
}
客户端:
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);
}
}
}
典型日志:
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
【问题讨论】:
-
也许你的秒表包括流的刷新时间和内核时间的执行......
标签: c# .net tcpclient networkstream