Empfehlungen zum Thema Multiplayer / Netzwerk?

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von starcow »

Guten Abend Zusammen
Ich möchte mal wieder meine programmier Fähigkeiten auffrischen bzw. erweitern. Im Sommer hab ich voraussichtlich wieder Zeit dafür. Bis es soweit ist, möchte ich schon mal etwas recherchieren.
Ich würde mich gerne mit der Thematik Multiplayer bzw. Netzwerk Programmierung im Zusammenhang mit C / C++ auseinandersetzen.
Mein Niveau schätze ich mittlerweile auf Fortgeschritten - auch wenn eher knapp :-D. Ein paar Bücher hab ich jedenfalls schon durchgearbetiet. Also die Grundlagen müssten eigentlich noch gut sitzen - auch wenn ich schon länger nichts mehr gemacht habe. Ich hoffe jedenfalls dass es so ist :-D.

Vorgestellt habe ich mir was eher simples. Vielleicht ein Programm, mit welchem man Nachrichten verschicken kann / den Ping messen kann / eine Liste der "eingeloggten" Clients aufrufen kann. Also wirklich nur Grundlagen.

Habt ihr vielleicht einen Tipp für mich, was ich da am besten dazu lesen soll? Ein gutes Buch wäre natürlich toll. Super wäre eins, das direkt mit C bzw. C++ Code-Beispielen arbeiten würde. Wie man es von den Grundlagen-Bücher her kennt.

Oder muss ich mich erst über die Netzwerkgrundlagen schlau machen - ganz unabhängig von der Programmierung? Ich hab zwar gewisse Kenntnisse, doch sind die eher unter gefährlichem Halbwissen einzuordnen.

Ich hab auf amazon ein bisschen rumgeschmöckert. Doch zum Thema Netzwerkprogrammierung in C / C++ konnte ich nichts finden.

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von antisteo »

Du musst dir eine Netzwerkbibliothek aussuchen.

Es gibt Bibliotheken, die geben dir direkten Zugriff auf die TCP- und UDP-Schicht. Das ist aber eher umständlich.

Für gwX nehmen wir enet (http://enet.bespin.org/), welche u.A. auch von Sauerbraten benutzt wird. Enet arbeitet über UDP, hat eine reliable-Schicht und ist Paketorientiert. Hat Flusskontrolle und führt Statistiken zu Bandbreite, Paket loss, Pingzeiten. Kann ich nur empfehlen.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
joggel

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von joggel »

Da streue ich auch noch gleich meinen Senf mit dazu.
RakNet
Sieht für mich relativ brauchbar aus.
Könnte man sich ja mal anschauen. Oder hat jemand damit Erfahrung?
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von antisteo »

joggel hat geschrieben:Da streue ich auch noch gleich meinen Senf mit dazu.
RakNet
Sieht für mich relativ brauchbar aus.
Könnte man sich ja mal anschauen. Oder hat jemand damit Erfahrung?
Kommerziell? Windows-Only? C++/C#-Only? (kein C-Interface)
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Benutzeravatar
Jeason
Beiträge: 41
Registriert: 07.09.2010, 22:58

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von Jeason »

antisteo hat geschrieben:Windows-Only?
Also ich bin mir ziemlich sicher das RakNet auch mit Linux geht.. jedenfalls wird in der Dokumentation auch auf Linux eingegangen
Ich verkaufe diese feinen Lederjacken.
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von kaiserludi »

Ich kann wärmstens Exit Games Photon und Exit Games Photon Cloud empfehlen.
Ist zwar kommerziell, aber 1. gibt es nicht unkommerzielles mit vergleichbarem Featureset, 2. ist es bei Self-Hosting für bis zu 100 User, die gleichzeitig online sind, komplett kostenlos.
Die Entwicklung der C, C++ und objC Clients wird von mir geleitet, bei Fragen ist also sogar ein Ansprechpartner hier im Forum aktiv.
Photon is a client server networking middleware solution, which is optimized for the usage in every kind of multiplayer realtime game like for example MMOs, RTS or FPS games.

Photon has passed 12,000 registered developers in March 2012 and is offered in two variants:

1) Photon Cloud (http://exitgamescloud.com)

2) Photon Server (http://exitgames.com)

Core features:
- reliable udp and tcp
- built-in serialization and encryption
- room logic
- lobbies
- interest management
- random matchmaking
- multi-server environments with integrated load balancing
- add or remove additional gameservers on demand
- mix self-hosted with cloud servers
- high performance core
- easily extendable high level API for client and server side
- clients from different platforms can play against each other in the same games
- C and C++ clients for Android, iOS, Marmalade, OS X and Win32
- objC clients for iOS and OS X
- C# clients for .NET, Silverlight, Unity3D, Windows Phone 7 and Windows 8
- Actionscript clients for Air and Flash
- Javascript clients
- choose between self-hosting or running your game on the exitgamescloud
- completely free for up to 100 concurrent users

References:
glu, World Gold Tour, CMune, Fishlabs, Codemasters, Kranx productions, Ping Pilots, Brainz interactive, Vivendi Games Mobile, UIEvolution, UFA, Fremantle Media, Chimera Entertainment, and many more
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
joggel

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von joggel »

antisteo hat geschrieben: Kommerziell?
http://www.jenkinssoftware.com/pricing.html
http://www.jenkinssoftware.com/hobbyist.html
Windows-Only?
http://www.jenkinssoftware.com/platforms.html
C++/C#-Only? (kein C-Interface)
Okay, starcow schrieb ja C/C++ ....
Also, muss man eben sehen ob es unbedingt C sein muss.

Lesen Junge... lesen!! ^^
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von Chromanoid »

Du könntest dir auch mal ØMQ anschauen. Das würde ich, wenn ich mit C/C++ entwickeln würde, wohl als erstes ausprobieren.
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von odenter »

Für Windows würde ich hier mal vorbei schauen:
http://www.serverframework.com/
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von starcow »

Danke für die vielen Hinweise - ich werd die Links auf jedenfall durchgehen.
Aber wie siehts den mit dem Basis-Wissen aus? Ist es nicht nötig mir erstmal Wissen zum eigentlichen Prinzip anzueignen, ehe ich gleich mit ner spezifischen Bibliothek loslege?

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von kaiserludi »

starcow hat geschrieben:Danke für die vielen Hinweise - ich werd die Links auf jedenfall durchgehen.
Aber wie siehts den mit dem Basis-Wissen aus? Ist es nicht nötig mir erstmal Wissen zum eigentlichen Prinzip anzueignen, ehe ich gleich mit ner spezifischen Bibliothek loslege?

Gruss starcow
Welches Wissen du selbst haben musst, hängt sehr davon ab, was dir die Bibliothek alles abnimmt.
Wenn sie die Sockels sauber abstrahiert, musst du dich über diese selbst z.B. nicht auskennen.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von odenter »

Also ich denke das ich schwierig.
Ich probiere selber gerade nur rum, hab schonmal nen simplen Multi-Threaded-Socket-Server (1 Thread pro Client) in C# geschrieben. Das .NET Framework nimmt einem ja auch schon viel ab.
Die Frage ist halt wie weit willst Du unten anfangen?

Ganz simple Beispiele sind in der MSDN oder gibt es zuhauf im Internet. Das Problem dabei, die sind halt auch extrem simpel und können eigentlich nix. Warum sich also nicht gleich was "richtiges", richtig im sinne von performant und skalierbar, angucken wenn man anfängt?

Unter dem Link den ich gegeben habe kannste ein fertiges, komplettes Framework, zugegeben einen alten (aber lauffähigen, soweit fehlerfreien) Stand, bekommen. Du kannst das benutzen und Dich erstmal auf das senden/empfangen konzentrieren.
Wenn es dann darum geht zu sehen was passiert da eigentlich ist der Code vorhanden und es besteht die Möglichkeit zu gucken, wobei ich zugeben muss diese Windows I/O completion Ports Nummer ist schon die Goldkantenlösung unter Windows.


EDIT:
Hier ist noch der Link zu Codeproject
http://www.codeproject.com/Articles/233 ... r-class-Pa
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von starcow »

odenter hat geschrieben:... wobei ich zugeben muss diese Windows I/O completion Ports Nummer ist schon die Goldkantenlösung unter Windows.
Goldkantenlösung? Meinst du damit jetzt auf Basis der MSDN?
Freelancer 3D- und 2D-Grafik
mischaschaub.com
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von odenter »

starcow hat geschrieben:
odenter hat geschrieben:... wobei ich zugeben muss diese Windows I/O completion Ports Nummer ist schon die Goldkantenlösung unter Windows.
Goldkantenlösung? Meinst du damit jetzt auf Basis der MSDN?
Was die möglichen Optionen (blocking-, non blocking-, synchron-, asynchron) unter Windows angeht.
simbad
Establishment
Beiträge: 132
Registriert: 14.12.2011, 14:30

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von simbad »

Wenn du nur wenige Benutzer, 100 oder so, erwartest, kannst du einen Thread pro Benutzer machen.
Aber wenn du, sagen wir mal 10000, erwartest, würde ich mehrere connections in einem Thread verwalten und dann darin eine Art pre-processing abwickeln. Dann das ganze an ein paar Worker-Threads weiterleiten.
Unter Windows ist man bezüglich der Anzahl der Sockets pro Thread durch WaitForMultipleEvent() begrenzt.

Unter Linux hat man da mit epoll ein wenig mehr Freiheiten.

Auch wenn du ein Framework verwendest, solltest du über die beiden Varianten nachdenken.
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von odenter »

1 Thread pro Client funzt zwar bei 100 Clients ist aber trotzdem nicht zu empfehlen. Steigt die Anzahl der Clients muss ggf. das ganze Design umgeworfen werden.
http://blogs.msdn.com/b/oldnewthing/arc ... 44912.aspx
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von kaiserludi »

simbad hat geschrieben:Wenn du nur wenige Benutzer, 100 oder so, erwartest, kannst du einen Thread pro Benutzer machen.
Aber wenn du, sagen wir mal 10000, erwartest, würde ich mehrere connections in einem Thread verwalten und dann darin eine Art pre-processing abwickeln. Dann das ganze an ein paar Worker-Threads weiterleiten.
[...]
Auch wenn du ein Framework verwendest, solltest du über die beiden Varianten nachdenken.
Ein gutes und halbwegs high level Framework nimmt einem solche Fragen ab.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
simbad
Establishment
Beiträge: 132
Registriert: 14.12.2011, 14:30

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von simbad »

Das mag wohl sein.
Ich kann mir nicht vorstellen, das alle Frameworks das gleich elegant gelöst haben. Folglich muss ich mich entweder für das eine oder andere Szenario entscheiden oder aber das Framework darauf untersuchen, wie leicht ein wechsel der Strategie möglich ist.
Genauso sollte man sich überlegen ob man mehrere Connections pro Benutzer haben wird oder nur eine. Auch das hat Einfluss auf das Gesamtdesign und die Frage ob ein Framework für den gewünschten Zweck in Frage kommt.

Da ich bis jetzt keine fremden Frameworks verwende, sondern mir alles selberbaue, weiß ich auch ganz gut, wo da der Hund begraben ist. Aber das ist eine andere Geschichte. (oder so ähnlich. In welchem Film/Serie kommt das nur vor?)
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Empfehlungen zum Thema Multiplayer / Netzwerk?

Beitrag von odenter »

simbad hat geschrieben:Wenn du nur wenige Benutzer, 100 oder so, erwartest, kannst du einen Thread pro Benutzer machen.
Aber wenn du, sagen wir mal 10000, erwartest, würde ich mehrere connections in einem Thread verwalten und dann darin eine Art pre-processing abwickeln. Dann das ganze an ein paar Worker-Threads weiterleiten.
Unter Windows ist man bezüglich der Anzahl der Sockets pro Thread durch WaitForMultipleEvent() begrenzt.

Unter Linux hat man da mit epoll ein wenig mehr Freiheiten.

Auch wenn du ein Framework verwendest, solltest du über die beiden Varianten nachdenken.
Jo Linux und fast alle anderen *nixe funktionieren anders und bieten andere Möglichkeiten.
Hier ist das gut beschrieben wie ich finde, auf Seite 2 wirds interessant.
http://www.artima.com/articles/io_design_patterns.html

Dort wird übrigens noch ein anderes Framework genannt das in der Inudstrie wohl verbreitet ist.
Antworten