来自nsoftware的IPDaemon组件正确设置

时间:2018-07-19 11:21:02

标签: c# .net server serversocket tcp-ip

nsoftware的

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);
    }
}

0 个答案:

没有答案