Какой самый простой метод для межпроцессного взаимодействия - через любой O / S & язык - PullRequest
2 голосов
/ 18 сентября 2011

Для соревнований по программированию ( code war ) я хочу установить его, где я передаю игровое состояние A.I. в виде XML-файла, и это А.И. отвечает с его очередь в XML-файл, который он возвращает в мое приложение. Каждая команда в соревновании может затем реализовать свои А.И. используя язык & O / S, они наиболее удобны.

Производительность не критична. Это два небольших файла XML (я говорю «файл», но он, вероятно, будет существовать только в памяти), которые передаются снова и снова. Но простота важна для того, чтобы быстро и легко реализовать клиентскую (A.I.) сторону на любом языке.

Я думаю, что на сервере я открываю сокет TCP, отправляю файл состояния xml, затем перехожу в режим приема в ожидании файла очереди xml. И у меня также будет тайм-аут ожидания, чтобы, если я не получил ответа в секунду, я включил для них очередь по умолчанию.

И на стороне клиента он ожидает подключения к сокету TCP, считывает XML-файл, определяет его очередь и записывает XML-файл обратно.

Это лучший способ получить что-нибудь, где клиент может быть написан быстро и легко на любом языке?

Обновление: Это будет иметь каждого игрока на разных машинах. Должны допустить это, так как некоторые предпочитают Windows и некоторые Linux. И это облегчает процесс.

спасибо - Дейв

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

Вам понадобится пакет XML на любых языках, которые вы используете.

Вы также можете использовать пакет HTTP через TCP / IP - он не обязательно должен использовать порт 80, конечно. Это может быть комбинацией с лучшей поддержкой, доступной как «стандартная» или «почти стандартная» для разных языков.

0 голосов
/ 18 сентября 2011

Если ваш клиент и сервер работают на одной и той же машине, может быть еще проще использовать stdin / stdout для IPC.Сервер будет выполнять процесс AI, записывать XML-документ в стандартный ввод AI, а затем ждать ответа на стандартный вывод AI.

Если ваш AI должен работать долго (для поддержания большого постоянного состояния, например), тогда вы можете разделить ИИ на две части, одна из которых является «резидентной», а другая - компонентом интерфейса, который запускается для каждого хода игровым процессом.Компонент интерфейса может взаимодействовать с резидентной частью любым механизмом, наиболее подходящим для языка (REST, общая память, передача сообщений и т. Д.).

...