Я написал клиентское приложение, чтобы поговорить с сторонним серверным приложением. Его comms находится над настраиваемым портом с SSL, использующим класс SslStream.SslStream Задержки после неактивности
Сервер разрешает постоянные подключения, однако я обнаружил, что мне нужно выполнить ping-сервер командой в течение 60 секунд, чтобы поддерживать разумный уровень отзывчивости. Через 60 секунд связь все еще работает, но есть заметная задержка в получении ответа. Это не удаление соединения и повторное подключение. Это займет больше времени, чем обычно. Отправка другой команды в течение 60 секунд выполняется снова. Отправка другой команды через 60 секунд вызывает задержки.
Как бы через 60 секунд SslStream повторно согласовывает с сервером, удваивающим время транзита. Я знаю, что SSL основан на сеансе, может ли это быть причиной? Есть ли что-нибудь, что я могу сделать, кроме отправки ненужных команд серверному приложению, чтобы сохранить его в живых?
Мой код ниже (пропущено):
var client = new TcpClient();
client.NoDelay = true;
client.Connect("111.111.111.111", 6969);
var sslStream = new SslStream(client.GetStream(), true, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient("111.111.111.111");
...
// The following method is invoked by the RemoteCertificateValidationDelegate.
private bool ValidateServerCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
{
if (policyErrors == SslPolicyErrors.None)
return true;
else
return false;
}
Надежда кто-то может пролить некоторый свет на это!
Мой клиент приложение написано в: C#/.NET 2.0 & 4.0 Хостинг на Windows 2003 и 2008
Благодаря
Спасибо за ваши комментарии - я не вижу, чтобы он был скоро перемещен в своп. Разъем/след очень мал, и данные между ними составляют всего несколько килобайт. Есть ли у вас какие-либо предложения о том, как проверить, что происходит с памятью в .NET? – DaveHogan
Вы имеете в виду, что данные передают через минуту всего несколько килобайт? То есть вы проверяли вопрос о пересмотре, принимая (или не принимали) место после минуты бездействия? –
@DaveHogan Есть инструменты для отслеживания активности управления памятью в .NET, но я не знаю конкретных названий (а не моей области знаний). Кроме того, сам SSL/TLS реализован в CryptoAPI, а не в .NET, поэтому, если что-либо происходит на уровне CryptoAPI/CNG, инструменты .NET, скорее всего, не будут отслеживать его. –