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 で反復を起動した更新が 1 つだけになるようにします。

于 2012-09-03T08:02:20.683 に答える