C # - 2 клиентские программы, торгующие переменной информацией - есть ли лучший способ? - PullRequest
3 голосов
/ 08 апреля 2011

Я пытаюсь отправить информацию об игроке из моей Игры в сетевой клиент, чтобы затем отправить его на сервер.

В настоящее время отношение ClientNetwork -> ClientGame поддерживается с файлами XML. Они читают / пишут туда и обратно на очень высокой скорости. Если вы используете только один XML-файл для этой сделки, один будет время от времени «захватывать» файл, создавая некоторую задержку, когда один не может читать, потому что другой злобно пишет и переписывает.

Чтобы исправить это, у меня есть 2 каждого из моих файлов XML. Если он не может прочитать один, он будет читать другой. Теоретически они должны использовать их обоих, так как это будет компромиссом от одного к другому. Не работает до номинала.

Но моя главная проблема в том, что использование XML в целом очень неаккуратное, десятки операторов try-catch, чтобы убедиться, что все они счастливы (и мой личный фаворит, try-catch внутри try-catch - WE ДОЛЖНО ПОЙТИ В ГЛУБИНУ )

Мне просто любопытно, есть ли лучший способ сделать это. Мне нужна статическая точка переменных, к которой могут обращаться обе клиентские программы. Боюсь, кто-то скажет базы данных ...

Я хотел бы заявить всем, кто изучает это и наткнулся на эту страницу, что Общая память - это круто. Хотя мне нужно преобразовать все строки в символы, а затем в байты и прочитать их одну за другой, в целом это ОДНО лучше, чем иметь дело с вещами, которые не могут одновременно читать / записывать один и тот же файл. Если вы хотите лучше понять его, а не просто использовать его, перейдите по ссылке по этой ссылке , там объясняется множество разновидностей сообщений и способы их использования.

Ответы [ 3 ]

6 голосов
/ 08 апреля 2011

Да, есть!

Вы ищете термин межпроцессное взаимодействие - связь между двумя процессами на одном компьютере.

Существуют различные методы, которые позволяют два процесса на одном компьютередля связи друг с другом, в том числе:

  • Именованные каналы
  • Общая память
  • Сокеты
  • HTTP

К счастью, приложения C # могут просто использовать инфраструктуру WCF для выполнения IPC (межпроцессное взаимодействие), используя один из вышеперечисленных, и позволить инфраструктуре WCF позаботиться о сложных битах!Вот несколько руководств для начала работы (есть еще много):

Кроме того, одна из полезных особенностей WCF заключается в том, что вы также можете использовать его для связи между различными машинами, просто изменив «Транспорт» (т. Е. Связьметод) к тому, который работает по сети (например, HTTP).

Если вы нацеливаетесь на .Net 2.0, то вместо этого вам следует изучить либо удаленное взаимодействие .Net, либо веб-службы.

0 голосов
/ 08 апреля 2011

Я согласен с ответом сокета tcp / ip, предложенным Дэвидом. Я бы просто отправил данные в сокет на локальном компьютере, а другое приложение прослушало сокет. Используя этот метод, вы можете легко и быстро передавать данные, и это будет работать независимо от того, на какую версию .net framework вы нацелены.

0 голосов
/ 08 апреля 2011

Простой поток TCP выскакивает на меня.Пусть сетевой клиент откроет прослушивающий сокет TCP, а игра подключится к сетевому клиенту.Вы можете продолжать отправлять те же данные XML, которые вы уже пишете, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...