Mein Server verliert, wenn sich Clients anmelden drastisch an Performance, bei 1 Client fällt das nicht auf, aber wenn wir 30 Connecten lassen, dann ist das merklich Spürbar... hat da jemand ideen? =(
Der Server hat für jede Connection einen Listening-Thread...
und wenn daten empfangen werden, dann landen sie hier
Der Server hat für jede Connection einen Listening-Thread...
VB.NET-Quellcode
- Private Sub ListenToConnection(ByVal con As Object)
- Dim message As String = ""
- Dim _con = CType(con, Connection)
- Do
- Try
- message = _decrypt(_con.streamr.ReadLine)
- Catch ex As Exception
- RaiseEvent ConnectionRemoved(_con)
- End Try
- If message <> "" Then
- If Me.InvokeRequired = True Then
- Me.Invoke(New Delegated_Receive(AddressOf _Receive), _con, message)
- Else
- _Receive(_con, message)
- End If
- End If
- Loop
- End Sub
und wenn daten empfangen werden, dann landen sie hier
VB.NET-Quellcode
- Private Sub _Receive(ByVal con As Connection, ByVal Message As String)
- If Message <> "" Then
- If Message.StartsWith("!Auth*" & con.cguid) Then
- Dim _authstring As String = Mid(Message, InStr(Message, "*", CompareMethod.Text) + 1)
- For i = 0 To ListView1.Items.Count - 1
- If CInt(ListView1.Items.Item(i).Text) = con.id Then
- ListView1.Items.Item(i).SubItems(4).Text = _authstring.ToString
- con.cguid = _authstring.ToString
- con.cname = "Client-" & con.cguid
- ListView1.Items.Item(i).SubItems(1).Text = con.cname.ToString
- ListView1.Items.Item(i).SubItems(3).Text = "Ermitteln des Benutzernamens"
- ListView1.Refresh()
- SendToClient(CInt(con.id), "?osuser*" & ListView1.Items.Item(i).SubItems(4).Text)
- End If
- Next
- ElseIf Message.StartsWith("!nvclient_closing*" & con.cguid) Then
- If Me.InvokeRequired = True Then
- Me.Invoke(New Delegated_removeclient(AddressOf Close_Connection), con)
- Else
- Close_Connection(con)
- End If
- ElseIf Message.StartsWith("!osuser*" & con.cguid) Then
- Dim _username As String = Mid(Message, InStr(Message, "#", CompareMethod.Text) + 1)
- For i = 0 To ListView1.Items.Count - 1
- If CInt(ListView1.Items.Item(i).Text) = con.id Then
- ListView1.Items.Item(i).SubItems(6).Text = _username
- con.clientuser = _username
- ListView1.Items.Item(i).SubItems(3).Text = "Ermitteln des Betriebssystems"
- ListView1.Refresh()
- SendToClient(CInt(con.id), "?osversion*" & ListView1.Items.Item(i).SubItems(4).Text)
- End If
- Next
- ElseIf Message.StartsWith("!osversion*" & con.cguid) Then
- Dim _osversion As String = Mid(Message, InStr(Message, "#", CompareMethod.Text) + 1)
- For i = 0 To ListView1.Items.Count - 1
- If CInt(ListView1.Items.Item(i).Text) = con.id Then
- ListView1.Items.Item(i).SubItems(5).Text = _osversion
- ListView1.Items.Item(i).SubItems(3).Text = "Ermitteln der Client-Version..."
- SendToClient(CInt(con.id), "?nvclientver*" & ListView1.Items.Item(i).SubItems(4).Text)
- ListView1.Refresh()
- End If
- Next
- ElseIf Message.StartsWith("!nvclientver*" & con.cguid) Then
- Dim _nvcver As String = Mid(Message, InStr(Message, "#", CompareMethod.Text) + 1)
- For i = 0 To ListView1.Items.Count - 1
- If CInt(ListView1.Items.Item(i).Text) = con.id Then
- ListView1.Items.Item(i).SubItems(8).Text = _nvcver
- con.clientos = _nvcver
- ListView1.Items.Item(i).SubItems(3).Text = "Verbunden..."
- ListView1.Refresh()
- End If
- Next
- If Me.InvokeRequired = True Then
- Me.Invoke(New _Delegated_writeToLog(AddressOf _writeToLog), con.cname & " hat sich mit uns verbunden!")
- Else
- _writeToLog(con.cname & " hat sich mit uns verbunden!")
- End If
- End If
- End If
- End Sub
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „MrTweek“ ()