Я написал клиентское приложение для общения со сторонним сервером. Его связь через пользовательский порт с SSL с использованием класса SslStream.
Сервер допускает постоянные соединения, однако я обнаружил, что мне нужно пропинговать сервер командой в течение 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
Спасибо