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
- Windows 7 x64
- Sollte aber auf jeder anderen Plattform laufen
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: Alles auswählen
*Server = WebSocket_Server::Create(8090, @WebSocket_Event())
Code: Alles auswählen
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
Code: Alles auswählen
WebSocket_Server::Frame_Text_Send(*Server, *Client, "Hello Client!")
Code: Alles auswählen
Free(*Server)