Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

1

23.04.2017, 00:55

[NodeJS] Sessions auf einem Server erstellen?

Hallo,

aufgrund dessen, dass mein Multiplayerspiel so funktionieren soll, wie ich es mir dachte, brauche ich verschiedene Sessions auf dem Server. Sessions sind wie Spielräume zu verstehen, in die man joinen kann. Außerdem soll man auch neue erstellen können. Es soll also eine Liste geführt werden, die der Client empfangen kann, in eine spezielle joinen kann oder auch eine neue erstellen kann.
Wenn ich nach Hilfe google, finde ich leider nichts brauchbares oder ich bin zu inkompetent ^^.

Hoffe ihr versteht mein Problem und habt eine Lösung oder einen Lösungsansatz im Petto.
Danke im Voraus.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

23.04.2017, 12:43

Soll der Server denn verschiedene Matches verwalten oder nur wissen dass es sie gibt? Wo liegt aktuell denn genau dein Problem? Mach dir mal Gedanken darüber was eine Session bei dir sein soll und welche Informationen damit verknüpft sein sollen. Für den Anfang reicht es ja vielleicht erst mal wenn eine Session nur aus einer ID oder einem Namen besteht. Dann kannst du ja schon mal anfangen dafür zu sorgen dass die Clients diese empfangen, erstellen und joinen können. Da muss ja erst mal nicht viel hinter stecken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

3

23.04.2017, 13:37

Soll der Server denn verschiedene Matches verwalten oder nur wissen dass es sie gibt?

Ja, er soll diese Spielräume unabhängig voneinander verwalten. Mit Verwalten meine ich Spielerdaten auszutausche (Position). Außerdem dürfen maximal zwei Spieler einen Raum betreten.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

24.04.2017, 00:00

Ist der Code dafür schon so weit gekapselt dass du ihn mehrfach parallel ausführen kannst? Dann musst du doch im Prinzip nur irgendwo eine Liste von diesen Spielinstanzen halten, wobei deine Clients eben dafür sorgen können dass neue Instanzen erstellt werden oder eben einer bestehenden Instanz beizutreten. Beschreibe doch mal was du bis jetzt versucht hast und wo es hapert.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

5

28.04.2017, 21:27

Ist der Code dafür schon so weit gekapselt dass du ihn mehrfach parallel ausführen kannst? Dann musst du doch im Prinzip nur irgendwo eine Liste von diesen Spielinstanzen halten, wobei deine Clients eben dafür sorgen können dass neue Instanzen erstellt werden oder eben einer bestehenden Instanz beizutreten. Beschreibe doch mal was du bis jetzt versucht hast und wo es hapert.

Genau diese Idee mit den Listen hab ich auch gehabt. Dazu müsste ich eine Klasse (o.ä.) schreiben, aus der eine Liste erstellt wird. Diese kann man dann ganz einfach verwalten, da jeder Listeneintrag so gesehen eine eigene Instanz ist, die komplett unabhängig von den anderen ist. Grob zusammengefasst ist es genau das, wonach ich suche. Soweit bin ich bis jetzt. Ich müsste mir natürlich OOP in Node JS anschauen, aber würde das grundsätzlich so funktionieren?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

29.04.2017, 05:03

aber würde das grundsätzlich so funktionieren?

Warum sollte es das nicht?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

7

29.04.2017, 14:08

Das was du suchst sind Websockets.

Dein Script gibt zunächst HTML Code aus. Diesen HTML Code kannst du mit einer beliebigen Scriptsprache(PHP,Ruby,NodeJs whatever) generieren.

Der Code sieht in etwa so aus

Quellcode

1
var connection = new WebSocket('ws://serverip:port');


dabei hast du ein event "onopen" "onmessage" und hast eine "send" methode. Das ist der Client Part.

Nun brauchst du ein NodeJS Server der unter dem Websocket Port erreichbar ist. Am besten googlest du nach "Websocket Server NodeJS".

Unabhängig von dem Websocket Server, hast du i.d.r. ein Array mit allen connections, zu dieser Connection Klasse kannst du noch weiter methoden und eigenschaften dranhängen.

Wenn der Client "send" Methode aufrufst, wirst du auf dem Server diese meldung emfpangen und bestimmen wer diese Meldung erfahren wird. Dann leitest du die weiter und in jedem Browser des spielers wird "onmessage" event getriggered.


Man bendenke jedoch dass Spieler, die einen alten Browser nutzen, keine Websockets haben. Hier kannst du sehen https://caniuse.com/#search=websocket welche Browser Websockets unterstützen.

LG

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

8

20.05.2017, 11:12

So ich melde ich zur Vollständigkeit nochmal mit der Lösung, wie es im Moment funktioniert :D

Serverscript:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var sessions = [];

// ...

var Session = function(){
    // Some variables...
}

// ....

client.on('createSession', function(name, data){
     var session = new Session();
     sessions.push(session);
     // ...
});


Trotzdem Danke für eure Hilfe ^^

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

20.05.2017, 12:44

Trotzdem Danke für eure Hilfe

Warum trotzdem ;) Das ist doch im Prinzip das was dir vorgeschlagen wurde :)
PS: Du kannst in JavaScript mittlerweile 'richtige' Klassen verwenden anstatt das über Funktionen zu lösen. Das hat man früher so machen müssen, mittlerweile aber wie gesagt nicht mehr.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige