IPDaemon 组件。我还没有找到使用此控件的好例子。我正在开发套接字服务器,它可以接受多达500个客户端连接,每个客户端每秒可以发送很多消息。当我与200多个客户端一起工作20分钟后,将 InBufferSize 更改为65536时,出现stackoverflow异常。我更改为8192,现在也不例外,但有时它完全停止接受连接,看起来好像挂了,但不是。我可以ping客户端它们还活着,但在日志中没有有关传入/拒绝连接的信息,但该应用程序看起来像在工作。 IPDaemon的最佳配置是什么才能满足这些要求? 您可能知道翔实的IPDaemon示例吗?文档对我没有帮助。
这就是我现在拥有的:
private void InitDaemon()
{
try
{
_daemon.OnConnected += OnConnected;
_daemon.OnConnectionRequest += OnConnectionRequest;
_daemon.OnDataIn += OnDataIn;
_daemon.OnDisconnected += OnDisconnected;
_daemon.OnError += OnError;
_daemon.OnSSLClientAuthentication += OnSSLClientAuthentication;
_daemon.SSLStartMode = IpdaemonSSLStartModes.sslImplicit;
_daemon.SSLAuthenticateClients = true;
// 0x00000001 Ignore time validity status of certificate. 0x00000002 Ignore time validity status of CTL.
_daemon.Config("SSLSecurityFlags=0x80000003");
_daemon.KeepAlive = true;
_daemon.LocalPort = 8082;
_daemon.DefaultMaxLineLength = 4096;
_daemon.DefaultTimeout = 60;
_daemon.DefaultEOL = "[END_OF_MESSAGE]";
_daemon.SSLCert = CertificateProviderService.GetServerCertificate();
//Add debug information about server certificate
Tools.LogDebug($"[SSLDaemonProvider]: Server certificate info {_daemon.SSLCert.ToFullInfoString()}");
//Set maximum available threads in thread pool.
_daemon.Config("MaxConnections=900");
_daemon.Config("InBufferSize=8192");
_daemon.Listening = true;
}
catch (IPWorksException ex) when (ex.Code == 223)
{
Tools.LogException(ex);
Tools.LogError(
SSLDSLocalization.DeleteCertificateManually,
Tools.SkinProvider.EECName,
CertificateProviderService.GetServerCertificate().ToFullInfoString());
}
catch (Exception ex)
{
Tools.LogException(ex);
}
}