Nane Kratzke

Thesis:

Websocket Relay Service

Published: 20 Feb 2019 (latest update: 30 Aug 2019)
Type: Bachelor (B. Sc.)
Author: Cedric Pump
State: completed
Study: Computer Science
Language: German
Institute: CoSA
Picture: ably.io

Für einige Browseranwendungen (z.B. Online Games, aber auch Chat-Applikationen, Code-Editoren, etc.) ist es sinnvoll, Echtzeit-artige P2P-Verbindungen zu haben - zum Beispiel um Spielzustände in Multiplayergames abzugleichen. Da Webbrowser meist nur Verbindungen aufbauen, aber (aus Sicherheitsgründen) keine Verbindungen annehmen können, sind P2P-Ansätze im Webclient-Umfeld häufig nicht gangbar.

Daher soll diese Arbeit einen Websocket-basierten Ansatz verfolgen und einen leichgewichtigen Websocket Relay Service realisieren, mit dem sich Clients Message-basiert koppeln lassen. Der Websocket Relay Service soll Messages von einem Client an einen Channel an andere Clients weiterleiten, die sich für diesen Channel angemeldet haben (um bspw. den Spielzustand auf mehreren Geräten abzugleichen).

Die Arbeit soll dabei aktuell existierende WebSocket Relay Lösungen recherchieren, diese überblicksartig darstellen und deren Funktionsumfang miteinander vergleichen. Auf Basis dessen soll ein eigener WebSocket Relay Service realisiert und in Form eines standardierten Container Image (Docker, OCI) bereitgestellt werden.

Der Websocket Relay Service soll Channels für die Messaging-Patterns

  • Publish-Subscribe (z.B. für Broadcast Anwendungsfälle)
  • Push-Pull (z.B. für Loadbalancing Anwendungsfälle, fan-in/out)
  • und ggf. Request-Reply (z.B. für Call-basierte Kopplungen)

unterstützen. Der Service soll mit der Basis-WebSocket API verwendet werden können. Eine REST-basierte API zum Anlegen, Löschen und Abonnieren von Channels ist vorzusehen.

Im Rahmen der Nachweisungführung sind neben der Korrekheit und Nutzbarkeit der Implementierung, auch die Performance und Leistungsgrenzen zu erheben und mit existierenden Lösungen zu vergleichen.

Die Lösung ist nicht nur als Quelltext, sondern auch als standardisierte Deployment Unit in Form eines OCI/Docker-konformen Containers bereitzustellen. Es sind dabei die 12-Factor App Prinzipien zu berücksichtigen.

Es ist ferner zu untersuchen, wie dieser Service horizontal skalierbar (scale out) gestaltet werden kann. Die horizontale Skalierbarkeit ist mindestens prototypisch nachzuweisen.

Die schriftliche Ausarbeitung soll auf den Kontext dieser Arbeit, Websockets im Allgemeinen und deren Einsatzgebiete, existierende Websocket Relay Lösungen, die sich aus dem Kontext ergebenden Anforderungen (Messaging-Pattern, Channels, 12-Factor App, etc.), die Implementierung inkl. Architektur, die Nachweisführung sowie Grenzen und Limitierungen der Lösung eingehen. Ergänzend soll die Arbeit erläutern, wie die Lösung für eigene Projekte deployt und Client-seitig eingesetzt werden kann (Tutorial).

Downloads