0

我有多个客户端和一个服务器,它们通过 TCP 通信对象更新。

基本上,服务器运行一个访问对象的算法,但这些可能会在通过 TCP 发送更新时发生变化。

我已经设置了标志来检查数据库的更新,并且只有在本地内存或数据库服务器之间的数据存在差异时才发送更新。问题是如果一个对象在迭代时发生了变化。

该算法在后台线程上运行,总结的代码架构如下所示,它是事件驱动的:

算法后台线程:

Private algorithm As New NewAlgorithmTest
Private Sub bg_workerAlgorithm_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles bg_workerAlgorithm.DoWork

       algorithm.RunAlgorithm()
    End Sub

Private Sub bg_workerAlgorithm_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bg_workerAlgorithm.RunWorkerCompleted
    bg_workerAlgorithm.RunWorkerAsync()
End Sub

从客户端收到的 Tcp 消息:

Private Sub Client_MessageReceived(sender As Object, e As TcpClient.MessageRecievedEventArgs)
Dim message As String = e.Message
'figure out which object to update based off message and set it as updatedObject
dim updatedObject
updatedObject.GetLatest()
End Sub

我该如何解决这个问题?

4

1 回答 1

1

如果在迭代完成之前不能阻塞线程,那么我将实现接收到的消息的 Stack<>(基于 FIFO)。

这将在消息进入时保存消息。然后,您可以依次在每条消息上触发后台线程,以确保只有一个更新触发了 Db 上的迭代。

于 2012-09-03T08:02:20.683 回答