Удаленное взаимодействие с использованием определенного объекта

Я играл с XNA и хочу попробовать заставить игру работать по локальной сети, но оказалось, что для этого мне нужно использовать что-то, называемое удаленным взаимодействием. В любом случае мне удалось заставить это работать

    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
Зачем вам нужно использовать удаленное взаимодействие? Его в значительной степени заменили на WCF.   -  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 больше используется для веб-материалов, а мне нужны только материалы для локальной сети.   -  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