MMO Spieleserver

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Ausserdem provozierst du mit so einem Overkill an Threads massenweise Context Switches. Da geht die Performance gehöhrig in den Keller.

Mehrere Threads lohnen sich nur in begrenzter Anzahl, z.b. pro Kern 1 Thread ist sinnvoll. Oder du legst mehrere Threads auf einen Kern, wenn bei deren Aufgaben die CPU sowieso die meiste Zeit auf eine andere Komponente warten muss. Z.B. beim Festplattenzugriff.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Beitrag von Tomarr Sovai »

Ich glaube die Synchronisation bei Spielen ist eh das größte Problem.

Vielleicht reicht es ja auch irgendwie so zu programmieren dass die Spieler die in Sichtweite, und etwas drüber hinaus, sind kommunizieren zu lassen. Müsste eigentlich gehen da Isometrische Ansicht.

Aber ist halt alles noch Spekulation, wenn ich meinem Server ner Versionsnummer geben sollte währe ich bei 0.000001 Alpha oder so.

Deswegen würde mir ein kleines Codebeispiel vielleicht weiter helfen. Programmiererfahrung habe ich zwar schon, aber mein Purebasic habe ich erst seit kurzem mal entstaubt. Ist zwar ein sehr schöner Compiler und die Syntax ist auch nicht schlecht, aber etwas gewöhnungsbedürftig, schon alleine wegen der Proceduren und so einigem anderen ist es sehr gewöhnungsbedürftig.

Übrigens habe ich schon ein Client/Server Beispiel hier gefunden, aber irgendwie funktioniert das bei mir nicht. Leider weiß ich momentan nicht wo das Thema ist. Aber wenn ich das so in mein Programm einbaue merkt der Client zwar ob der Server läuft oder nicht, meldet dies auch ob er sich verbinden konnte, aber der Server reagiert einfach nicht darauf. Also die Meldung dass sich ein Client angemeldet hat fehlt.

Vielleicht liegt es auch daran dass das Beispiel aus einer, wahrscheinlich, älteren Version von Purebasic stammt.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Also wenn Du mit Netzwerkprogrammierung noch nicht viel Erfahrungen gesammelt hast, dann würde ich zunächst was einfaches programmieren. Ich hab mal einen Pong Clone gemacht (siehe http://www.purebasic.fr/german/viewtopic.php?t=15489), und selbst der hat noch so seine Tücken (Code ist dabei).

Es gibt da tausendes Zeugs was man beachten muß, besonders bei Spielen und besonders bzgl. Synchronisation (dafür gibt es z.B. Techniken wie Dead Reckoning usw.), da muß man erstmal ein solides Grundwissen haben, bevor man was mit 1000 Clients o.ä. beginnt.

Versuche erstmal den Pong Clone zu verstehen und bau dann vielleicht mal z.B. ein Spiel wie Bomberman für 4 Spieler. Das ist wirklich aufwendiger als man sich das anfangs vielleicht vorstellt.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Beitrag von Tomarr Sovai »

Wie gesagt, programmieren ist mir nicht unbekannt. Lediglich einiges was Purebasic angeht ist etwas gewöhnungsbedürftig. In VB und so weiter habe ich durchaus schon Netzwerkanwendungen geschrieben, nur ist es halt doch in PB etwas anders.

Und wie gesagt, verstehen tue ich die Programme schon. Genauso weiß ich wie man ein Programm schreibt, zumindest syntaktisch.

Nur, was ich noch nicht weiß ist, was für Techniken stecken hinter so einem größeren Server, also wie z.B. hat nun jeder seinen eigenen Thread, was verbirgt sich hinter dem Begriff ZonenServer und so weiter. Für jedes Programmierproblem gibt es natürlich auch verschiedene Ansätze.

Und gerade dieser Begriff ZonenServer der lässt mich halt etwas hellhörig werden, und da wollte ich halt raus finden was sich dahinter verbirgt.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Gleichzeitig sendet sie entsprechende Aktionen an alle Clients, wie eben halt die Bewegungen der anderen, Umgebungsgegebenheiten wie Häuser, Bäume, deren Ressourcen, Unterhaltungen usw. Das muss doch innerhalb einer einzigen Schleife unheimlich lange dauern und tierisch lagen.
Umgebungseinheiten (Bäume, Häuser usw) würd ich nicht vom Server senden lassen. Alles was sich nicht bewegt, kannst vom Client berechnen lassen und das was noch übrig ist paßt normal relativ leicht in Deine "einzige Schleife". Auf was dabei geachtet werden muß, daß natürlich die Karten aller Spieler mit der Karte auf dem Server übereinstimmen. Verwendest Du dynamische Karten/Level, ist das natürlich etwas anderes.

Was ein größeres Problem ist, wurde hier auch schon gesagt, ist die Synchronisation.
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Beitrag von Tomarr Sovai »

Ok, Bäume ist natürlich übertrieben. Nur soll der Spieler halt auch Häuser selber aufstellen können, die müssen natürlich an die Clients gesendet werden. Bei den Bäumen kann das natürlich auch der Client übernehmen, so dass der Server halt nur weiß ob der Baum bereits gefällt wurde oder nicht, dem Stimme ich dir schon zu.

War halt nur ein Beispiel. Aber das alles kommt ja nach und nach rein. Man muss ja nicht alles sofort implementieren. Natürlich fängt das ganze klein an.

Wobei ich da wieder auf eine Merkwürdigkeit von PB komme. Objektorientiertes Programmieren ist hier doch wieder etwas anders als z.B. in VB.

Funktionieren in PB eigentlich Überlagerungen von Proceduren? In der Hilfe steht davon nichts, währe aber doch recht brauchbar.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Wobei ich da wieder auf eine Merkwürdigkeit von PB komme. Objektorientiertes Programmieren ist hier doch wieder etwas anders als z.B. in VB.
Die Merkwürdigkeit ist eher wie darauf kommst? PB is prozedural und nicht OO.
Funktionieren in PB eigentlich Überlagerungen von Proceduren
Was genau ist damit gemeint?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

PB ist Prozedural, nicht Objektorientiert, noch nicht einmal Modular.
du musst also bei einigen Grundproblemen komplett umdenken, wenn du von VB und/oder C++ kommst.
PB hat mehr parallelen zu nacktem C als zu objektorientiertem VB.

natürlich kannst du in PB auch Objektorientiert Programmieren, aber dann musst du dir alles selber stricken.
PB beinhaltet keine Klassen/Instanzen-Verwaltung, die musst du selber schreiben.

allerdings bist du damit auch nicht allein gelassen, es gibt ettliche Kollegen, die sich damit auseinandersetzen.
schau mal in die PB-Lounge, die Kollegen dort beschäftigen sich intensiver mit OOP in PB.

@Topic
sowas wie ein von Spielern gebautes Haus ist auch ein Statisches Objekt,
das wird nur beim Einlog-Vorgang zusammen mit der Map runtergeladen.

ein gefällter Baum oder ein fertiggestelltes Haus (dass dort nicht mehr die Baustelle angezeigt wird sondern das Haus mit Eingang) braucht dann nur dort ein Update zu senden, und das kommt relativ selten vor.
ständig senden braucht man nur angaben über dynamische objekte wie Player und NPCs.

und wenn das thema für dich neu ist, folge lieber ZeHas (und meinem) Rat und probier mal was für 4 player und dann vielleicht für 12.
auch wenn einer schon zehn jahre mit einer bestimmten sprache programmiert,
wenn er sich an einen komplett neuen themenkomplex wagt,
sollte er erstmal kleine brötchen backen, sonst findet er keinen erfolg, nur frustration.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Beitrag von Tomarr Sovai »

Das würde auch erklären warum ich das mit dem OO in PB noch nicht so richtig hin bekommen habe. Ist das so gewollt oder kommt das noch? Weil OO halte ich, zumindest für größere Projekte, schon für wichtig. Und da reicht es nicht immer das man eigene Strukturen erstellen kann.

Überlagerung von Proceduren, wie soll ich das beschreiben?

In VB gibt es die Möglichkeit SUBs und Funktionen mit dem gleichen Namen aber unterschiedlichen Übergabeparametern zu schreiben.

Z.B. die Funktion Name(variable as string)
und dann Name(variable es Integer)

Es ging beides, und je nachdem was übergeben wurde wurde das ganze unterschiedlich verarbeitet, es waren halt zwei unterschiedliche Funktionen. Ab und zu ist das ganz brauchbar, auch wenn das Beispiel nun etwas blöd gewählt ist.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich hab jetzt grad mal in dein Profil geschaut, weil du ja seit 2005 angemeldet bist...
aber auch seit Dez.2005 nix gepostet, deswegen also die "allgemeine Unkenntnis von oft plattgetretenen Reizthemen".

also, OOP direkt von PB unterstütz mit implementierten Klassen und allem schickimicki wird es niemals geben, das hat Fred schon mehr oft genug gesagt.

es ist allerdings möglich, dir die Werkzeuge zusammenzustricken.
die Interfaces Prototypes, Pseudotypes usw. stellen dir eigentlich alles was du brauchst zur verfügung.
wie gesagt, schau halt mal in die Lounge und such/frag dich dort schlauer.
ist halt die Frage, ob du dir ein OO-system schreiben willst, nur um ein bissel OOP zu nutzen.

Grundsätzlich ist es auch eine Frage der Gewöhnung und des Konzepts.
Man kann völlig ohne OOP auch komplexe Anwendungen entwickeln,
oder was meinst du, wie der Luftfahrtverkehr in den 60er und 70er Jahren verwaltet wurde.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten