Empfehlungen zum Thema Multiplayer / Netzwerk?
- starcow
- Establishment
- Beiträge: 575
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Wohnort: Zürich
- Kontaktdaten:
Empfehlungen zum Thema Multiplayer / Netzwerk?
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
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
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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.
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.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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?
RakNet
Sieht für mich relativ brauchbar aus.
Könnte man sich ja mal anschauen. Oder hat jemand damit Erfahrung?
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Kommerziell? Windows-Only? C++/C#-Only? (kein C-Interface)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?
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Also ich bin mir ziemlich sicher das RakNet auch mit Linux geht.. jedenfalls wird in der Dokumentation auch auf Linux eingegangenantisteo hat geschrieben:Windows-Only?
Ich verkaufe diese feinen Lederjacken.
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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.
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]
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]
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
http://www.jenkinssoftware.com/pricing.htmlantisteo hat geschrieben: Kommerziell?
http://www.jenkinssoftware.com/hobbyist.html
http://www.jenkinssoftware.com/platforms.htmlWindows-Only?
Okay, starcow schrieb ja C/C++ ....C++/C#-Only? (kein C-Interface)
Also, muss man eben sehen ob es unbedingt C sein muss.
Lesen Junge... lesen!! ^^
- Chromanoid
- Moderator
- Beiträge: 4285
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Du könntest dir auch mal ØMQ anschauen. Das würde ich, wenn ich mit C/C++ entwickeln würde, wohl als erstes ausprobieren.
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Für Windows würde ich hier mal vorbei schauen:
http://www.serverframework.com/
http://www.serverframework.com/
- starcow
- Establishment
- Beiträge: 575
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Wohnort: Zürich
- Kontaktdaten:
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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
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
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Welches Wissen du selbst haben musst, hängt sehr davon ab, was dir die Bibliothek alles abnimmt.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
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]
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]
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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
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
- starcow
- Establishment
- Beiträge: 575
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Wohnort: Zürich
- Kontaktdaten:
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Goldkantenlösung? Meinst du damit jetzt auf Basis der MSDN?odenter hat geschrieben:... wobei ich zugeben muss diese Windows I/O completion Ports Nummer ist schon die Goldkantenlösung unter Windows.
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Was die möglichen Optionen (blocking-, non blocking-, synchron-, asynchron) unter Windows angeht.starcow hat geschrieben:Goldkantenlösung? Meinst du damit jetzt auf Basis der MSDN?odenter hat geschrieben:... wobei ich zugeben muss diese Windows I/O completion Ports Nummer ist schon die Goldkantenlösung unter Windows.
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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.
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.
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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
http://blogs.msdn.com/b/oldnewthing/arc ... 44912.aspx
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Ein gutes und halbwegs high level Framework nimmt einem solche Fragen ab.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.
"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]
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]
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
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?)
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?)
Re: Empfehlungen zum Thema Multiplayer / Netzwerk?
Jo Linux und fast alle anderen *nixe funktionieren anders und bieten andere Möglichkeiten.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.
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.