Ich nutzte schon seit längere Zeit die WebSocket Grundlage von "bauglir".
Jedoch wird diese soweit ich gesehen habe nicht weiter entwickelt.
Kennt ihr noch alternativen?
Ich selbst habe es nur einmal versucht eine eigene Lib zu erstellen, klappte damals aber nicht.
Ich selbst habe einige Änderungen hinzugefügt, um diese Lib weiter nutzen zu können.
Das Problem, was ich schon vor meinen Änderungen hatte und immer noch habe ist:
Ich kann eine WebSocket Verbindung aufbauen, problemlos. Jedoch wird sie nicht wieder
beendet.
Ein paar Debug Infos:
Diese Infos sehe ich im Browser, wenn ich mir den Event ausgeben lasse.CloseEvent
bubbles: false
cancelBubble: false
cancelable: false
code: 1000
composed: false
currentTarget: WebSocket {url: "ws://10.10.10.10:6062/", readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}
defaultPrevented: false
eventPhase: 0
isTrusted: true
path: []
reason: "Server beendet !"
returnValue: true
srcElement: WebSocket {url: "ws://10.10.10.10:6062/", readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}
target: WebSocket {url: "ws://10.10.10.10:6062/", readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}
timeStamp: 6189.5999999997
type: "close"
wasClean: true
__proto__: CloseEvent
Entscheidet ist hier wohl "wasClean". Der Grund für die Schließung ist auch von meinem WebSocket Server, genau wie
der "code von 1000".
Hinweis: WasClean ist nicht jedes mal auf true, aber ob auf true oder false ist nach meinen Beobachtungen egal.
Wenn ich jetzt den WebSocketServer erneut aufrufe kommt folgende Fehler Meldung von "Synapse":
2020-03-05 13:06:24 - 98 (Address already in use)
Nun muss ich immer den Port ändern. Nach einem timeout von vielleicht 30 bis 60 Sekunden, kann ich den anderen Port weiter nutzen.
Ein netstat -nat fördert foglgednest zu tage:
netstat -nat|grep 10.10:6062
2 Fällt mir gerade auf. Vielleicht liegt es daran, aber wie kann ich die Verbindung schließen?1 tcp 0 0 10.10.10.10:6062 10.10.10.10:56584 TIME_WAIT
2 tcp 0 0 10.10.10.10:56590 10.10.10.10:6062 TIME_WAIT
3 tcp 0 0 10.10.10.10:6062 10.10.10.10:56588 TIME_WAIT
4 tcp 0 0 10.10.10.10:6062 10.10.10.10:56586 TIME_WAIT
Ich habe mir auch schon mal ein Unveränderte Version der Lib runter geladen und es direkt mit dem Beispielen Probiert,
da ist das gleiche Problem vorhanden. Der Port wird so wie es aussieht NICHT frei geben.
Damit die Verbindung Überhaupt erst gelöscht wird, musste ich folgendes in meiner destroy eintragen:
Code: Alles auswählen
destructor TPLWebSocketServer.Destroy;
begin
WebSite.Free; StrListA.Free;
if Assigned(Server) then begin
Server.CloseAllConnections(1000,'Server beendet !');
sleep(1000);
Server.TerminateThread;
end;
inherited Destroy;
end; // TPLWebSocketServer.Destroy