Ich schreibe also ein Schach-Matchmaking-System, das auf einer Lobby-Ansicht mit Spielräumen, allgemeinem Chat usw. basiert. Bisher habe ich einen funktionierenden Prototyp, aber ich habe große Zweifel an einigen Dingen, die ich mit dem Server gemacht habe. Das Schreiben eines Gaming-Lobby-Servers ist für mich eine neue Programmiererfahrung und daher habe ich kein klares oder präzises Programmiermodell dafür. Ich konnte auch kein Papier finden, das beschreibt, wie es funktionieren sollte. Ich habe "Java Network Programming 3rd Edition" bei Amazon bestellt und warte immer noch auf den Versand. Hoffentlich finde ich in diesem Buch einige nützliche Beispiele / Informationen.
In der Zwischenzeit möchte ich Ihre Meinungen sammeln und sehen, wie Sie mit einigen Dingen umgehen würden, damit ich lernen kann, wie man einen Server richtig schreibt. Hier sind ein paar Fragen aus meinem Kopf: (Vielleicht werden noch mehr kommen)
Definieren wir zunächst, was ein Server tut. Die Hauptfunktion besteht darin, TCP-Verbindungen mit Clients aufrechtzuerhalten, die von ihnen generierten Ereignisse abzuhören und sie an die anderen Spieler zu senden. Aber steckt noch mehr dahinter?
Soll ich einen Thread pro Client verwenden? Wenn ja, sind 300 Clients = 300 Threads. Ist das nicht zu viel? Welche Hardware wird benötigt, um das zu unterstützen? Und wie viel Bandbreite verbraucht eine Lobby dann ca.
Welche Art von Datenstruktur sollte verwendet werden, um die Sockets der Clients zu halten? Wie schützen Sie es vor gleichzeitigen Änderungen (z. B. wenn ein Spieler die Lobby betritt oder existiert), wenn Sie es durchlaufen, um ein Ereignis auszulösen, ohne den Durchsatz zu beeinträchtigen? Ist ConcurrentHashMap hier die richtige Antwort oder gibt es einige Techniken, die ich kennen sollte?
Welchen Mechanismus würden Sie verwenden, wenn ein Benutzer die Lobby betritt, um den Status der Lobby auf ihn zu übertragen? Und währenddessen sprudeln die anderen Ereignisse in die Luft?