我编写了一个客户端应用程序来与第三方服务器应用程序通信。它的通信通过使用 SslStream 类的 SSL 的自定义端口进行。
服务器允许永久连接,但我发现我必须在 60 秒内使用命令 ping 服务器以保持合理的响应级别。 60 秒后,通信仍然有效,但接收响应时有明显的延迟。它不是断开连接并重新连接。只是需要比平时更长的时间。在 60 秒内发送另一个命令又很快了。 60 秒后发送另一个命令会导致延迟。
就好像在 60 秒后,SslStream 与服务器重新协商,使传输时间加倍。我知道 SSL 是基于 session 的,这可能是原因吗?除了向服务器应用程序发送不必要的命令以使其保持事件状态之外,我还能做些什么吗?
我的代码如下(截取):
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 上托管
谢谢
一般来说,SSL 支持重新协商,所以情况确实如此。另一个原因可能是服务器执行的代码部分在一分钟不活动后被交换到磁盘,以释放操作内存。当您发送请求时,应该再次读取此内存。如果 block 很大,这可能需要一些时间。
我是一名优秀的程序员,十分优秀!