Отдалечено използване на конкретен обект

Играх с XNA и искам да опитам да накарам една игра да работи през LAN, но се оказа, че за да направя това, трябва да използвам нещо, наречено отдалечено управление. Така или иначе успях да накарам това да работи

    public class TestObject : MarshalByRefObject
{
    int testInt;

    public Level()
    {
        this.testInt = 5.Zero;
    }


    public int GetNumber()
    {
        return testInt;
    }
}

и моят сървърен канал = нов TcpChannel(4444); ChannelServices.RegisterChannel(канал, невярно);

        Type type = Type.GetType("Domain.Level,Domain");

        RemotingConfiguration.RegisterWellKnownServiceType(type,
            "FirstRemote",
            WellKnownObjectMode.Singleton);

и клиент

      this.chanel = new TcpChannel();
      ChannelServices.RegisterChannel(chanel, false);
      this.testObject = (TestObject)Activator.GetObject(typeof(TestObject),
         "tcp://localhost:4444/FirstRemote");

така че това работи, но проблемът е, че сървърът няма начин за достъп до обекта и не мога да направя конструктор, който приема аргументи, така че няма начин да инициализирам каквито и да е данни на тестовия обект. Как да направя обект и след това да го накарам да го използва вместо да създава нов обект?


person user1819682    schedule 13.11.2012    source източник
comment

Например някои сайтове ми казват да използвам mrt add accounts-ui (използвайки Meteorite, нали?), а други казват meteor add accounts-ui.

Доколкото разбирам, Meteorite е просто контрол на версиите/мениджър на пакети. Дали това е правилно? Каква е разликата между двете команди по-горе?

  -  person John Saunders    schedule 13.11.2012
comment
WCF? Това ще направи ли това, което искам? Не знам точно какво е или някога съм чувал за него.   -  person user1819682    schedule 13.11.2012
comment
Като цяло WCF ще направи това, което искате. Не съм XNA експерт, така че е възможно XNA да не поддържа WCF. Ще трябва да проверите. Вижте stackoverflow.com/tags/wcf/info.   -  person John Saunders    schedule 13.11.2012
comment
Очевидно WCF поддържа само HTTP и HTTP е предназначен да бъде по-бавен от ICP. Изглежда, че WCF се използва повече за уеб базирани неща и имам нужда само от LAN неща.   -  person user1819682    schedule 13.11.2012
comment
WCF поддържа много протоколи, включително TCP. Използва се за всички мрежови сценарии. Възможно е WCF на XNA да поддържа само HTTP и HTTPS. Ако не се нуждаете от абсолютно най-високата скорост, тогава това не е проблем. Ако вашето приложение се нуждае от най-високата възможна скорост, тогава с WCF можете да създадете свой собствен транспорт, използвайки TCP/IP, след което да го използвате от страна на клиент и услуга. Това ви дава оптимална скорост, като същевременно ви дава само един код за поддръжка (транспорта). Вашите по-високи слоеве ще бъдат WCF, което вероятно ще продължи поне още десетилетие.   -  person John Saunders    schedule 13.11.2012
comment
Забравете, че някога сте чували за дистанционно управление. WCF е много по-добър избор.   -  person Jim Mischel    schedule 13.11.2012
comment
Сигурен съм, че вие ​​знаете по-добре от мен, така че ще се опитам да накарам това нещо с WCF да работи. Благодаря за помощта   -  person user1819682    schedule 13.11.2012


Отговори (1)


За съжаление, вероятно ще откриете, че мрежовата комуникация в реално време в игрите е по-сложна от настоящата посока, която поемате. Повечето игри използват постоянни връзки на сокет за предаване на информация напред и назад между клиентите, а други методи обикновено са твърде бавни за работа в мрежа в реално време.

Препоръчвам ви да разгледате мрежовата библиотека на Lidgren. Lidgren абстрахира мрежовата комуникация и прави много по-лесно сериализирането на данни в много малки и бързи пакети, които могат да бъдат прехвърлени чрез няколко режима на надеждност през UDP и TCP. Можете да намерите проекта Lidgren тук: http://code.google.com/p/lidgren-network-gen3/

Като странична бележка, за мен беше много ценно да прочета как Unreal Engine работи в мрежа тук: http://udn.epicgames.com/Three/NetworkingOverview.html

И написах блог, който демонстрира някои специфични подробности относно внедряването на шаблон клиент/сървър: http://syndicatex.com/flatredball/flatredball-and-lidgren-multiplayer-networking/

person profexorgeek    schedule 03.01.2013