Aktuelle Zeit: 18.01.2021 18:44

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 35 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 07.05.2020 20:15 
Offline

Registriert: 19.10.2014 15:51
Wow, vielen Dank für deine Mühen!
Heute Morgen ist der Server abgeschmiert, seidem lasse ich ihn über die IDE laufen, um zu sehen an welcher Stelle er wieder hängen bleibt. Natürlch läuft der Server seitdem ohne Probleme ;)
Ich werde dein Code nach deinem Vorschlag morgen ändern, momentan spielen zu viele Leute. Da kann ich den Server nicht einfach beenden.
Aber sollte er heute Abend noch einmal abschmieren, werde ich CloseNetworkConnection heute noch auskommentieren.

Wirklich vielen Dank, dass du dich da so rein kniest!

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 07.05.2020 21:06 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
Ich habe eine neue Version auf GitHub gepusht. Der Fehler sollte jetzt behoben sein, und clients werden auch korrekt getrennt.

Das Problem war, dass doch nicht sichergestellt wurde, dass die Client-ID, welche CloseNetworkConnection übergeben wird, noch gültig ist. Wobei hier die Hilfe nicht eindeutig ist, und nicht sagt, dass es verboten wäre eine Client-ID zu verwenden, welche durch eine Rückgabe von #PB_NetworkEvent_Disconnect als getrennt gekennzeichnet wurde (muss != darf):

Zitat:
Wenn ein Server ein #PB_NetworkEvent_Disconnect Ereignis empfängt, wird seine zugehörige Client-Verbindung automatisch geschlossen und CloseNetworkConnection() muss in diesem Fall nicht aufgerufen werden.


Das Problem ist nun gelöst, indem ich sicherstelle, dass NetworkServerEvent nie parallel mit anderen Netzwerkbefehlen aufgerufen wird. Vorher war es möglich, dass beim einem Aufruf von NetworkServerEvent die Client-ID ungültig gemacht wurde, was natürlich schlecht ist, wenn zur gleichen Zeit irgendwas mit diesem client gemacht wird. Was genau intern passiert kann ich nicht sagen, es kann sein, dass das Problem unabhängig vom Multithreading existiert. Also es reichen würde Netzwerkbefehle mit gerade abgelaufenen Client-IDs zu bombadieren, bis es crasht. Oder es kann sein, dass nur der gleichzeitige Zugriff auf Netzwerkbefehle Probleme macht, unabhängig ob die IDs noch gültig sind oder nicht. Letztendlich weiß Fred ob die Befehle ein Problem mit Multithreading haben, oder ob nur die Dokumentation angepasst werden muss.

mk-soft hat geschrieben:
Das senden mit SendNetworkData oder SendNetworkString von einen anderen Thread auf einer nicht mehr vorhanden Connection Crash bei macOS


Ich habe deinen Thread im englischen Forum erst jetzt gesehen. Eventuell hilft es auch bei dir, den Zugriff auf Netzwerkfunktionen per Mutex einzuschränken.

Edit:

Ich hab mir gerade die englische Hilfe angesehen, da steht was anderes:

Zitat:
When a server receives a #PB_NetworkEvent_Disconnect event its associated client connection is automatically closed and CloseNetworkConnection() must not be called in this case.


Ist also nen typischer übersetzungsfehler: must not --> muss nicht anstatt darf nicht :/

_________________
Webseite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 08.05.2020 07:04 
Offline

Registriert: 19.10.2014 15:51
Super!
Muss ich gleich runterladen.
Kannst du mir die Zeile nennen, ab wann du Änderungen gemacht hast. Ich möchte gerne versuchen zu verstehen, was du da machst ;)

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 08.05.2020 09:31 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
Hier sind die Änderungen: https://github.com/Dadido3/WebSocket_Server/commit/db49f954b7ec113fe9d62f03d743bd177da55c08

Ich hab einfach nur den Mutex weiter "nach Außen" geschoben, sodass er NetworkServerEvent mit einschließt.

_________________
Webseite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 08.05.2020 10:22 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Da ich mir nicht sicher bin das intern alles Threaded ist, mache ich das mit den Events so.
Soll aber intern nach dem letzen Update so sein.
Code:
  Repeat
      LockMutex(ServerMutex)
      Event = NetworkServerEvent(\ServerID)
      If Event
        ConnectionID = EventClient()
        keyConnectionID = Hex(ConnectionID)
      EndIf
      UnlockMutex(ServerMutex)
      Select Event


Den Fehler bei macOS konnte ich weiter einkreisen. Mal schauen was Fred dazu sagt.

Mit dem Module habe ich bis jetzt noch keine Probleme gehabt. Module NetworkTCP

Frage:
Kümmerst sich das Java WebSocket sich darum das die Daten bis 64kB vollständig einmalig übergeben werden, oder muss man sich selber darum kümmert das die Daten alle angekommen sind?

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 08.05.2020 11:02 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
mk-soft hat geschrieben:
Frage:
Kümmerst sich das Java WebSocket sich darum das die Daten bis 64kB vollständig einmalig übergeben werden, oder muss man sich selber darum kümmert das die Daten alle angekommen sind?


Ganz unabhängig von der Implementation, der WebSocket standard ist paketbasiert. Das heißt, alle gesendeten Pakete kommen in der Reihenfolge und Größe an, wie sie gesendet wurden. Und das entweder ganz oder garnicht. Auch die Größe eines Pakets ist quasi uneingeschränkt (~9,22 EB), aber in meiner lib habe ich ein Standardlimit von 10 MB pro Paket, das ist aber konfigurierbar. (Clients werden zwangsgetrennt, wenn das Limit überschritten wird)

mk-soft hat geschrieben:
Da ich mir nicht sicher bin das intern alles Threaded ist, mache ich das mit den Events so.


Ich hatte gedacht, es stürzt dort auf der Client-Seite ab, wo kein Mutex vorhanden ist um NetworkClientEvent und SendNetworkData zu serialisieren. Oder hast du auf der Server-Seite trotz Mutex auch Probleme mit NetworkServerEvent auf MacOS? Aber vollkommen unabhängig davon muss Fred irgendwas beheben. Im Idealfall sollte die Netzwerklib korrekt Threadsafe sein.

_________________
Webseite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 08.05.2020 13:23 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Die Network Library ist ThreadSafe.

Habe nur bedenken beim Abfrage von den EventClient(), da dieser kein Parameter für die ServerID hat.
Daher mach ich nur ein Mutex bei Abruf des Network Events und dem zugehörigen Abfrage der ClientID.

Sonst habe ich keine Probleme die mit den anderen Network Funktionen, da bei diesen die ClientID oder ConnectionID mit angegeben werden muss.
Da läuft es ThreadSafe.

Das senden mit SendNetworkData verwende ich selber noch einmal ein eigenen Mutex.
Somit stelle ich sicher das über die gleiche ConntectionID nicht von unterschiedlichen Thread gleichzeitig gesendet werden kann.

Edit
Ausserdem überprüfe ich die Sendelänge, falls der Empfangs- oder Sende- Buffer überläuft. (size <= 64kB)
Code:
      len = 0
      LockMutex(MutexSend)
      Repeat
        cnt = SendNetworkData(ConnectionID, SendBuffer + len, size - len)
        len + cnt
      Until len = size Or cnt < 0
      UnlockMutex(MutexSend)

Nur bei macOS scheint es ein Problem mit der CFSocket und Network RunLoop zu geben,
wenn man von einem anderen Thread zu schnell hintereinander sendet.
Add Link: FixSendNetworkData

P.S.
Mit diesen Module NetworkData habe ich über mehrere Rechner ein Leistungstest mit sehr gößen Daten durchgeführt und es kann zu KEINEN Fehler ;)

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 04.06.2020 22:36 
Offline

Registriert: 19.10.2014 15:51
Hey Dadido3,

der Server läuft jetzt ohne Abstürze und sehr gut.
Aber ab und zu läuft sich jetzt der Server "heiss", die CPU ist dann auf fast 100% und nichts geht mehr. Da hilft dann nur ein Neustart.
Ich kann das leider an keinem "Ereignis" festmachen.
Ich kann damit leben, aber ich dachte mir, ich teile dir das mal als Feedback mit.

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 10.06.2020 13:34 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
Gut zu wissen, dass es jetzt nicht mehr abstürzt.

Wäre es möglich den Server mit Debugger laufen zu lassen, und wenn er sich aufhängt das Programm anzuhalten und notieren an welcher Zeile das passiert?
(Eventuell ist es auch hilfreich das Programm mehrfach fortzusetzen und anzuhalten, um alle möglichen Stellen herauszufinden, wo das Programm in einer Schleife steckt.)

Auch die Programmanalyse könnte hilfreich sein, da werden die Zeilen und deren aufrufe gelistet.

Wenn ich ein wenig mehr informationen hätte, könnte ich das Problem wahrscheinlich auch beheben.

_________________
Webseite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 16.07.2020 23:11 
Offline

Registriert: 19.10.2014 15:51
Hab leider dein Post erst jetzt gelesen.
Ja klar, kein Problem, ich lasse den Server die nächste Zeit in der IDE mit eingeschaltenem Debugger laufen.
Ich vermute allerdings, dass sich der Server in irgendeiner Leerlaufschleife befindet aus der er nicht rauskommt. Das werde ich wohl kaum mit einem Debugger sehen (oder doch?)

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 35 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye