Aktuelle Zeit: 25.09.2020 17:41

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 32 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: WebSocket Server
BeitragVerfasst: 09.02.2015 00:47 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
Guten Tag,

hiermit stelle ich mein Modul zum erstellen eines WebSocket-Servers vor.
Mit WebSockets lassen sich ohne große Probleme dauerhafte Verbindungen zwischen Webseiten und Webservern herstellen.
Es ist damit möglich Webseiten daten zu schicken, ohne dass diese Anfragen senden müssen.

Anwendungen könnten sein:
  • Chat
  • Browserspiele
  • Kommunikation mit Webgadget

Getestete Betriebssysteme:
  • Windows 7 x64
  • Sollte aber auf jeder anderen Plattform laufen

Beispiel:
Es ist ein Beispiel in form einer Chat-Applikation im Repository vorhanden.
Der Client ist in Javascript und HTML geschrieben und der Server natürlich in PureBasic.

Über diesen Link kommt man direkt zum Client.
Der Client sollte sich sofort zu dem hier laufenden Server verbinden.
Falls diese nicht läuft kann jeder seinen eigenen Server kompilieren und starten.
Dazu muss einfach Example_Chat_Server.pb kompiliert und gestartet werden.
Wenn dann der Client geöffnet wird, wird dieser sich lokal verbinden.

Wichtige Befehle:
WebSocket-Server öffnen:
Code:
*Server = WebSocket_Server::Create(8090, @WebSocket_Event())

Ereignisse als callback empfangen:
Code:
Procedure WebSocket_Event(*Server, *Client, Event, *Event_Frame.WebSocket_Server::Event_Frame)
  Select Event
    Case WebSocket_Server::#Event_Connect
      PrintN(" #### Client connected: " + *Client)
     
    Case WebSocket_Server::#Event_Disconnect
      PrintN(" #### Client disconnected: " + *Client)
      ; !!!! Ab dem Moment bei dem dieses Ereignis eintritt ist der *Client nicht mehr gültig !!!!
     
    Case WebSocket_Server::#Event_Frame
      PrintN(" #### Frame received from " + *Client)
     
      ; #### OpCode stellt die Art des Frames dar.
      ; #### Entweder Text, Binär-Daten, Ping-Frames oder anderes.
      ; #### Wichtig für den Endanwender sind meist nur die Text- und Binärframes.
      Select *Event_Frame\Opcode
        Case WebSocket_Server::#Opcode_Ping
          Debug "Client sent a ping frame"
        Case WebSocket_Server::#Opcode_Text
          Debug "Text received: " + PeekS(*Event_Frame\Payload, *Event_Frame\Payload_Size, #PB_UTF8|#PB_ByteLength)
        Case WebSocket_Server::#Opcode_Binary
          ; *Event_Frame\Payload contains the data, *Event_Frame\Payload_Size is the size of the data in bytes
      EndSelect
     
  EndSelect
EndProcedure

Textframe senden:
Code:
WebSocket_Server::Frame_Text_Send(*Server, *Client, "Hello Client!")

WebSocket-Server schließen:
Code:
Free(*Server)


Dateien:

Viel Spaß damit.

_________________
Webseite


Zuletzt geändert von Dadido3 am 28.02.2018 21:23, insgesamt 1-mal geändert.

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

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Vielen Dank dafür! :allright:

Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 16.02.2015 17:19 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:53
Wow! Besten Dank :-) Dann lege ich NodeJS erstmal wieder zur Seite..

_________________
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 24.10.2019 10:45 
Offline

Registriert: 19.10.2014 15:51
Ich habe festgestellt, dass der Web-Socket-Server unter Linux (Ubuntu und Debian) gerne ankommende Strings "verschluckt".
Unter Windows läuft alles soweit prima.
Woran kann das liegen?

_________________
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: 24.10.2019 12:58 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
Woran das liegen könnte kann ich jetzt auch nicht sagen, es sollte aber funktionieren.

Hast du einen kurzen Beispielcode, welcher das Problem zeigt? Und hat das Chat-Beispiel auch dieses Problem?
Ohne es hier reproduzieren zu können, kann ich es schlecht beheben.

_________________
Webseite


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

Registriert: 19.10.2014 15:51
Nein, leider nicht. Der Code, den ich benutze ist sehr, sehr gross. Aber ich benutze als Grundlage deinen Code, sodass du das genau mit diesem auch testen kannst. Das Problem ist, ich kann es an nichts festmachen. mal geht es recht lange gut, dann verschluckt er wieder Text. Nur unter Linux. Unter Windows (x64 und x86) geht alles problemlos. An der Länge der gesendeten Strings liegt es jedenfalls NICHT.

_________________
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: 30.10.2019 14:29 
Offline
Benutzeravatar

Registriert: 24.02.2007 22:15
Ich hab jetzt mal das Chat-Beispiel unter linux gestartet, und ein wenig getestet. Bis jetzt konnte ich das Problem noch nicht reproduzieren.

Wie oft tritt es denn auf. Also in welchen Zeitabständen, oder ab wie vielen Nachrichten?
Hast du bereits überprüft ob Nachrichten auch im Chat-Beispiel verloren gehen? Auch könntest du versuchen alles Empfangene in eine Datei zu schreiben, um dann später zu festzustellen, ob die daten wirklich ankamen. Dafür musst du einfach WriteData() bei den beiden ReceiveNetworkData-Aufrufen hinzufügen:

Code:
Result = ReceiveNetworkData(*Client\ID, *Client\HTTP_Header\Data + *Client\HTTP_Header\RX_Pos, 1)
If Result > 0
  WriteData(#Some_File, *Client\HTTP_Header\Data + *Client\HTTP_Header\RX_Pos, Result)
  ...


Code:
Result = ReceiveNetworkData(*Client\ID, *Client\RX_Frame()\Data + *Client\RX_Frame()\RxTx_Pos, Receive_Size)
If Result > 0
  WriteData(#Some_File, *Client\RX_Frame()\Data + *Client\RX_Frame()\RxTx_Pos, Result)
  ...


Wie sieht es mit der Gegenseite aus? Ist diese in js, PureBasic oder sonstwas geschrieben? Macht es auch einen Unterschied wo der Client läuft?

_________________
Webseite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 13.11.2019 14:17 
Offline

Registriert: 19.10.2014 15:51
Hey Dadido3, ich habe es noch einmal ausgiebig getestet.
Unter Windows funktioniert dein Code zu 100%
Unter Linux ist es nicht leicht den Fehler zu bemerken:
Ist der Client im eigenen Netzwerk, dann treten die Empfang-Probleme seitens des Server nicht so oft auf.
Viel deutlicher ist es festzustellen, wenn man den Client auf eine "richtige" Homepage irgendwo im Internet legt.
Dann ist sehr schnell festzustellen, dass der Linux-Socket-Server öfter Web-Socket-Strings nicht empfängt.
Dabei ist es unerheblich wie oft oder wie schnell Strings an den Server gesendet werden. Zumindest habe ich keine Regelmäßigkeit oder Ursache feststellen können. Ich kann nur bemerken, DASS es einfach so ist.
Du kannst wirklich deinen eigenen Code verwenden, um zu testen, da ich ja deinen Code benutze. Ich habe ihn nicht verändert.

_________________
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: 13.11.2019 14:41 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Hast Du denn die ankommenden Pakete mal mitgeloggt, wie Dadido vorgeschlagen hat?
Die Frage, die ich mir stelle ist, ob es an der Empfangs- oder Sendeseite liegt, weil ich gesehen habe, das die Sendeseite kein wirkliches Errorhandling hat.

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebSocket Server
BeitragVerfasst: 13.11.2019 16:49 
Offline

Registriert: 19.10.2014 15:51
Ich habe jetzt vom Client aus per Timer jede Sekunde einen String gesendet ("Dies ist Sting "+str(StingNr))

In unregelmäßigen Abständen kommt der String bei Linux NICHT an. Bei Windows kommen alle Strings an.

Wenn man jetzt noch neben dem Timer ab und zu etwas richtig in den Chat schreibt, dann merkt man es noch eher, dass nicht alles beim Server ankommt (unter Linux)

_________________
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  [ 32 Beiträge ]  Gehe zu Seite 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