通过计时器处理套接字连接状态是否好

本文关键字:状态 是否 连接 套接字 计时器 处理 | 更新日期: 2023-09-27 18:27:30

在服务器/客户端应用程序中,使用计时器检查每个客户端是否已连接是否会消耗内存?

例如,Socket服务器接受Socket客户端并将其添加到列表中,然后计时器通过循环检查列表中的每个客户端,如果未连接,则从List<>中删除并触发事件。。。然而,尽管这种方式听起来很难,尤其是计时器的间隔是1秒。。。另外,如果有1000个客户端连接,计时器能在1秒内检查所有客户端吗?还是我应该把它做大?

我关心我的应用程序使用的内存,以及在1秒内检查许多客户端的计时器功能。这是真的吗?提前感谢。

通过计时器处理套接字连接状态是否好

不,这不是一个好主意,因为它已经实现了这样一种机制,即发送操作和接收操作中的Timeout,这意味着如果你将接收超时设置为10秒,调用receive,但没有任何结果,它就会抛出一个异常,通知你想要使用计时器。。。

上一次我创建像您所描述的服务器/客户端应用程序时,我创建了一个优先级设置为BelowNormal的新线程。

Timers唯一的问题是它们(可能)在UI线程内执行,这意味着你的表单将变得没有响应或滞后。

然后,我基本上在Do/Wile循环中连续循环线程,直到应用程序关闭。加入一个快速线程。线程。睡眠(100)和性能将是完美的。

在循环中,我会检查传入的连接请求,并像你说的那样,将它们添加到列表中等。然后,你也可以处理与每个连接的客户端的通信,因为这将产生最小的影响。

Private Sub StartSocketsServer()
    Try
        Dim oThread As New Threading.Thread(AddressOf StartSocketsServer_Threaded)
        With oThread
            .Name = "Socket Server"
            .Priority = Threading.ThreadPriority.BelowNormal
            .IsBackground = True
            .Start()
        End With
    Catch ex As Exception
        'Handle exception
    End Try
End Sub
Private Sub StartSocketsServer_Threaded()
    Try
        Do
            'Perform all of your sockets here in a threaded environment.

            Threading.Thread.Sleep(1000) '1 sec
        Loop Until Me.IsDisposed
    Catch ex As Exception
        'Handle thread safe exceptions here
    End Try
End Sub