MPI ähnliche Bibliothek für Spiele

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 577
Registriert: 05.07.2003, 11:17

MPI ähnliche Bibliothek für Spiele

Beitrag von Lord Delvin »

Hat jemand ne Ahnung obs sowas wie MPI für Spiele gibt?

Hab mir überlegt, dass es eigentlich ganz nützlich wäre seinen Netzwerk Code so zu machen, aber man kann ja nicht fordern, dass sich alle Spieler vor einem Spiel zu einem MPICluster zusammenfügen. Glaub auch nicht, dass das automatisch geht.

Und bevor ich jetzt selbst Anfang sowas zu schreiben, frag ich lieber erstmal.

Gruß
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: MPI ähnliche Bibliothek für Spiele

Beitrag von Chromanoid »

Also du könntest mal diverse andere Netzwerk Sachen wie Google Protocol Buffers, Apache Thrift, das Apache Hardoop Projekt o.Ä. anschauen.
Speziell für Spiele fällt mir momentan nur Raknet ein.
Ansonsten könntest du auch mal nach diversen P2P-Implementationen schauen, wobei mir da persönlich nur jxta eingermaßen bekannt ist. Das Ding ist aber recht komplex und hat im Moment durch das Schließen von Projekt Kenai (Sun's Versuch ein besseres Sourceforge zu schaffen, der jetzt von Oracle erst mal wieder geschlossen wurde :/) ein paar Community Probleme...
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 577
Registriert: 05.07.2003, 11:17

Re: MPI ähnliche Bibliothek für Spiele

Beitrag von Lord Delvin »

Chromanoid hat geschrieben:Ansonsten könntest du auch mal nach diversen P2P-Implementationen schauen, wobei mir da persönlich nur jxta eingermaßen bekannt ist.
Also nach dem Wikipedia Artikel ist das viel zu groß und viel zu sehr auf Dinge ausgelegt, die ich garnicht brauche. Ich würd damit n Darknet schreiben, aber kein Spiel. Und ich glaub auch nicht, dass die sich von der Orakleübernahme in die Suppe spucken lassen:)

ProtocolBuffers und Thrift sind mir unsympatisch, weil sie einen weiteren Compiler benötigen und hadoop sieht mir so aus als wärs eigentlich für ein ganz anderes Problem designt, also auch eher unbrauchbar.

Ich will eigentlich was haben, was mit dem C++ Template System auskommt.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: MPI ähnliche Bibliothek für Spiele

Beitrag von Chromanoid »

Lord Delvin hat geschrieben:Also nach dem Wikipedia Artikel ist das viel zu groß und viel zu sehr auf Dinge ausgelegt, die ich garnicht brauche. Ich würd damit n Darknet schreiben, aber kein Spiel. Und ich glaub auch nicht, dass die sich von der Orakleübernahme in die Suppe spucken lassen:)
jo das stimmt natürlich. die leute in der mailing liste sind halt etwas angenervt davon ^^.
Lord Delvin hat geschrieben:hadoop sieht mir so aus als wärs eigentlich für ein ganz anderes Problem designt
also apache avro vom hardoop projekt wäre halt vielleicht was für die de-/serialisierung (da muss man nur json schemas für erstellen).
Lord Delvin hat geschrieben:ProtocolBuffers und Thrift sind mir unsympatisch, weil sie einen weiteren Compiler benötigen
viele netzwerk frameworks benutzen die eigenen compiler, um den einsatz in vielen unterschiedlichen sprachen zu gewährleisten - ist das echt so ein großer sympathienachteil für dich? Du musst doch bloß ein Schema für den jew. compiler anlegen und bekommst dann deine Netzwerk-Datenklassen generiert. Bei Thrift ist glaube ich recht vorteilhaft, dass man gleich ein bisschen mehr netzwerk infrastruktur drin hat.

Hast du schon mal SDL_Net angeschaut?
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 577
Registriert: 05.07.2003, 11:17

Re: MPI ähnliche Bibliothek für Spiele

Beitrag von Lord Delvin »

Chromanoid hat geschrieben:Hast du schon mal SDL_Net angeschaut?
Ja. Das is so in etwa das, was ich benutzen will um nen NetworkCommunikator zu implementieren. Ich denke das das, was ich vorhab etwas unintuitiv für die meisten Programmierer sein wird, weil ich versuche Threads und Entfernte Prozesse gleich zu behandeln, also insbesondere vor dem Nutzer der Bibliothek völlig verstecke, dass es sowas wie ein Netzwerk überhaupt gibt. Das ist zumindest mal das Ziel.

Ich denk ich werd das mit boost::asio Implementieren, weil ich sowieso schon relativ viel boost libs verwende unds dann auf eine mehr auch nicht ankommt. Ist auf jeden Fall schöner als SDL_net einzubauen. Zumal ich glaube, dass die asio Entwickler fähiger und aktiver sind.

EDIT:
So hab mich jetzt ma zwei Tage hingesetz und mir ist jetzt selbst auch wesentlich klarer, wie so ne Bibliothek eigentlich funktionieren sollte. Für locale Kommunikation hab ichs im Prinzip schon gemacht, benutzung sähe dann in etwa so aus:

Code: Alles auswählen

#include <iostream>

#include "../libmpl/include/mpl.h"

#include <boost/thread.hpp>
#include <cstring>

struct test
{
    mpl::LocalCommunicator* comm;

    test(mpl::LocalCommunicator* comm)
    :comm(comm){};
    test(const test& t)
    :comm(t.comm){};

    void operator()()
    {
        mpl::Message m;

        mpl::Client c(comm);

        while(!c.recv(m));

        if(!strncmp(m.get<const char*>(), "Load1", m.getLength()))
        {
            while(!c.recv(m));

            std::cout << "Load file " << m.get<const char*>() << std::endl;

            c.send("success", m.getSource());
        }
        else
            c.send("unknown command!", m.getSource());
    }
};

using namespace std;

int main()
{
    cout << "Creating local Communicator..." << endl;

    mpl::LocalCommunicator comm;

    {

        cout << "Creating local Clients..." << endl;
        mpl::Client c1(&comm), c2(&comm);

        boost::thread* slave = 0;
        {
            test t(&comm);
            slave = new boost::thread(t);
        }

        cout << "Clients connected." << endl;

        c1.send("Test", c2.id());

        c1.send("Load1", 3);
        c1.send("random", 3);

        mpl::Message m;
        while(!c2.recv(m));

        cout << "c2 got " << m.get<const char*>() << endl;

        while(!c1.recv(m));

        slave->join();

        cout << "thread answered: " << m.get<const char*>() << endl;
    }

    cout << "Wait for Communicator to die.." << endl;

    return 0;
}
Ausgabe ist:

Code: Alles auswählen

Creating local Communicator...
Creating local Clients...
Clients connected.
Load file random
c2 got Test
thread answered: success
Wait for Communicator to die..

stub @ /home/lorddelvin/libmpl/src/mpl/LocalCommunicator.cpp line: 117
	LCD just halts; this may lead to problems
Für Netzwerk sollte es im Prinzip ausreichen noch sowas wie mpl::NetworkCommunicator comm_world( irgendeine adresse ) hinzuschreiben und comm_world im Konstruktor von comm mitzugeben. Dann sollte das automatisch alles richtig gemachte werden.

Falls es irgendjemand haben oder weiterentwickeln will schreibt einfach.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Antworten