WebSocket Server

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: WebSocket Server

Beitrag von stevie1401 »

MUSS der Purifier an sein? Ich habe ihn AUS, weil ich sonst bei meinem eigenen Server die Daten nicht laden kann, weil das zu lange dauern würde.
Was der Purifier eigentlich?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Dadido3
Beiträge: 119
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: WebSocket Server

Beitrag von Dadido3 »

Der Purifier dient zum Aufsprüren von Schreibzugriffen außerhalb der erlaubten/alloziierten Speicherbereiche. Ob dieser aber hilfreich ist, hängt davon ab wodurch der Fehler verursacht wird.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: WebSocket Server

Beitrag von stevie1401 »

Ok, Linux frisch installiert, Purebasic 620 Beta4 raufgemacht. Deinen Code getestet, Server schmiert sofort ab :(
Du kannst dir den Code hier herunterladen:
https://doppelkopf-cafe.de/stevieservertest.zip
Zuletzt geändert von stevie1401 am 03.04.2025 19:22, insgesamt 2-mal geändert.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Dadido3
Beiträge: 119
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: WebSocket Server

Beitrag von Dadido3 »

Einfach in eine ZIP packen und z.B. diesen Webdienst nutzen: https://wormhole.app/
Benutzeravatar
Dadido3
Beiträge: 119
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: WebSocket Server

Beitrag von Dadido3 »

Ok, ich habe noch ein wenig experimentiert, konnte aber bis jetzt immer noch keinen Crash hervorrufen. Aber ich habe die erhöhte CPU-Auslastung wie du sie beschrieben hast beobachten können:
stevie1401 hat geschrieben: 03.04.2025 15:56 Ab und zu geht der Server bei den ersten Malen NICHT ins Nirvana. Dann bekomme ich allerdings plötzlich eine CPUauslastung von 100%, die erst dann runtergeht, wenn ich den Server beende.
Und ich konnte auch den Übeltäter ausmachen. Unter Linux verhalten sich die Mutexes "unfairer", und es kam aufgrund der Anzahl an Clients und der Versuche Daten zu senden zu einer Situation wo der "Hauptthread" den "Eventthread" zum Großteil der Zeit blockiert hat. Das Problem hierbei ist, dass der "Eventthread" die Logik beinhaltet um die Verbindung zu den Clients zu trennen. Somit hat sich der Server in einen Soft-Lock maneuvriert.

Theoretisch gab es für den "Eventthread" hunderte male in der Sekunde die Möglichkeit den entsprechenden Mutex zu sperren. Aber anscheinend war das Zeitfenster dafür zu kurz. Unter Windows funktioniert das seltsamerweise, dort teilen sich Threads die Mutexes besser auf.

Ich habe das Problem jetzt gelöst, indem ich die beiden internen Threads zusammengefasst habe. Und dabei habe ich auch noch ein paar andere Kleinigkeiten optimiert.

Seltsamerweise kam es bei mir aber nie zu einem Crash, sondern immer nur zu dem beschriebenen "Soft-lock". Daher kann ich nicht sagen, ob es bei dir nun funktionieren wird.

Hier der Link zur neuen Version: https://github.com/Dadido3/WebSocket_Se ... tag/v1.007
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: WebSocket Server

Beitrag von stevie1401 »

Vielen Dank für deine Bemühungen :)
Ich habe dir als PN ja noch einmal einen Film geschickt, indem du sehen kannst, wie der Server sofort abschmiert.

Leider ist auch bei deiner neuen Version das gleiche Verhalten :(

Da das Verhalt ja auch bei deinem Threadloser Server auftritt muss es etwas anderes sein.

Ich habe die Listen in Verdacht. Mit denen habe ich unter Linux immer Probleme gehabt.
Ich versuche jetzt mal selber deine Clientlisten in ein normales Array umzuwanden.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: WebSocket Server

Beitrag von stevie1401 »

Ich habe jetzt bei deiner 07 Version die globalen Clients in ein Array umgewandelt. Und siehe da: Der Server stürzt nicht mehr ab!
Dann habe ich das auch bei dem threadlosen Server probiert. Dort hält der Server zumindest länger durch. Erst nach dem 5- 6 Crashtest geht der Server ins Nirvana. Einige Male kann ich also Testen ohne dass er abstürzt.
Ich bin mir sicher, wenn man alle Listen in Arrays umwandelt, wird der Server rund laufen.
Ich weiss nur nicht, ob ich die internen Listen auch in Arrays umwandel kann. Für mich ist der Code nur sehr schwer zu lesen.
Ich programmiere wirklich "Basic" :)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Dadido3
Beiträge: 119
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: WebSocket Server

Beitrag von Dadido3 »

Ok, anstatt Debian 12 habe ich mir jetzt mal Mint 22.1 installiert. Und der Prozess beendet sich sofort nachdem die Verbindungen geschlossen werden, genau wie du es beschrieben hast. Mal gucken wie weit ich das Problem reduzieren und eingrenzen kann. Ich melde mich zurück falls ich mehr Details habe.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: WebSocket Server

Beitrag von stevie1401 »

Toll :) :allright:

Solltest du Purebasic-Bugs entdecken, bitte unbedingt im engischen Forum posten, Fred macht ja gerade wieder Updates, allerdings nur für Windows. Vielleicht gibt es dann ja auch bald noch mal Linux-Updates.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Dadido3
Beiträge: 119
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: WebSocket Server

Beitrag von Dadido3 »

Hier ist nun der Bugreport: https://www.purebasic.fr/english/viewtopic.php?t=86674

Es scheint wirklich ein Bug in der Linux-Version zu sein. Mal sehen wie schnell das behoben sein wird.
Antworten