Многопользовательская браузерная игра [Java]
Я разрабатываю небольшую карточную игру, которая называется "Тарниб". Сама игра похожа на карточную игру в бридж, но с другими правилами. Так или иначе, я закончил всю игру как отдельное настольное приложение, используя Java 6. ЭтоКартинка игры. В любом случае, теперь мне нужно преобразовать это в веб-приложение с многопользовательскими возможностями, чтобы пользователи могли, например, создать новую комнату и присоединиться к существующим комнатам, где играется.
К сожалению, я не имею ни малейшего представления о сети в Java но я искал довольно много, и я нашел некоторые другие продукты Java, которые могут помочь мне (JavaFX, JSP, GlassFish), но я все еще не мог понять, что именно мне нужно для выполнения моей задачи. Все, что мне сейчас нужно, - это направление, в котором я буду двигаться, и я буду делать свои исследования и, надеюсь, узнаю новые навыки, необходимые.
7 ответов:
Другие ответы уже указали вам на некоторые ресурсы.
Но самая большая проблема, с которой вы, вероятно, столкнетесь, заключается в том, что обычно невозможно (или чрезвычайно трудоемко до полной перезаписи) "добавить" многопользовательские возможности впоследствии, если вы не спланировали архитектуру соответствующим образом.
Поскольку у вас может быть много взаимодействия и много обновлений, которые я должен - поправьте меня, если я ошибаюсь - быть на клиенте как можно быстрее, я бы предложил взглянуть на Cometd, который держит соединение http открытым для каждого клиента и отправляет обновления с сервера клиенту. Если вы используете jetty в качестве веб-сервера (и, следовательно, его "продолжения"), он даже сильно масштабируется.
Дело в том, что нет ни одного стандартного способа сделать это, о котором вам нужно прочитать.
Как вы хотите реализовать это веб-приложение? Как апплет? Использование стандартных веб-страниц? Как веб-приложение запуска, которое люди должны загрузить?
Последний вариант позволит вам повторно использовать большую часть существующего кода. Если вы выберете этот вариант, возможно, вам стоит изучить RMI, поскольку это, вероятно, будет соответствовать вашей существующей архитектуре.
Но в остальном, как указывал С. Лотт, прежде чем делать что-либо еще, вам нужно пойти и научиться создавать веб-приложения. Эти учебники были бы хорошим началом, также вы определенно должны изучить (X)HTML, JavaScript и веб-технологию Java, такую как JSP, JSF или Struts. Именно то, что вам нужно, будет зависеть от ваших требований, без дополнительных деталей трудно рекомендовать один.
Во-первых, узнайте, что такое "веб-сайт" и "веб-приложение".
Сделайте уроки: http://java.sun.com/developer/onlineTraining/index.jsp
Смотрите учебники по Glassfish: http://java.sun.com/javaee/overview/screencasts.jsp
Как только вы закончите все учебные пособия, вы создадите веб-приложение.
После того, как вы создали учебное веб-приложение, вы можете создать свое веб-приложение.
Веб-приложения очень плохо подходят для взаимодействия в реальном времени, которое вы имеете в карточной игре. Да, это можно сделать, но это будет связано с грязными взломами, и у вас всегда будут проблемы с высокой задержкой и разорванными соединениями. И, конечно, вам придется полностью переписать большую часть вашего приложения.
Есть ли возможность запуска игры в виде Java-апплета? Это значительно упростило бы вашу работу (позволило бы гораздо чаще использовать ее повторно) и сделало бы конечный результат более удобным.
Невозможно быстро перенести клиентское приложение в веб-приложение. В зависимости от того, как вы хотите это сделать, похоже, что вам нужно либо использовать решение JSP/Javascript, либо решение JavaFX. JavaFX на самом деле позволяет более плавное (более плавное, чем JSP/Javascript, но все равно займет больше, чем день =D ) портирование клиентских приложений, но у него более крутая кривая обучения, чем у технологии JSP/Javascript в целом. Интересно отметить, что JavaFX-это не просто веб-приложение. язык. Если бы вы закодировали свое первоначальное клиентское приложение в JavaFX, вы бы выполнили около 50% работы.
Используйте Java NIO, это довольно просто, и если вы поймете основы, не будет никакой реальной необходимости во всех этих бесчисленных библиотеках... или, во всяком случае, вы бы знали их внутренние органы. Одна из важных вещей, однако, уже упоминавшаяся здесь, заключается в том, что структура игры должна быть адаптирована для сетевого взаимодействия с самого начала. В худшем случае это может быть полная перепись. В основном, вам нужно будет создать клиентскую базу данных, сокетные соединения, а со стороны сервера-каждое соединение (представленное SelectorKey object), должен быть инкапсулирован в объект, представляющий собой "присоединенный клиент". Затем операции чтения / записи будут выполняться в сокет ключа. Но это еще не все. Сервер должен быть центром вашего приложения link, так что вам придется разработать целый сетевой протокол сообщений для вашей игры (через TCP, нет необходимости в UDP в этом виде игры). Также-читайте больше о протоколах (TCP / UDP / sockets, ethernet), чем больше вы читаете - тем лучше.
Тоже! Обратите внимание на HTML5 websockets материал. Это великая вещь!!!
Comments