|
|
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане. Есть следующий браузерный клиент: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Метод main выглядит так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Подскажите, как оптимизировать следующую строку: Код: java 1. Неудобно Html код писать так. Основное условие - клиент должен запускаться в отдельном потоке в методе main. Вопрос возникает потому что HttpServlet и WebSocketServlet(который тоже хотелось бы использовать) нельзя имлементить от Runnable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 07:37 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
A, еще конечно в методе main строчка: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 07:47 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Можно узнать, почему в "типа клиенте" вы создаёте http-сервер? Почему "браузерный клиент" вообще содержит метод main? Может, всё-таки, вы делаете игровой сервер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 07:51 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, 1. Вот тут я не могу архитектуру до конца продумать. Можно было и в методе run() ведь создать. 2,3. Да это игровой сервер и метод main его. Остальная часть кода не приведена, потому что проблема именно с клиентом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 08:00 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
1. Не важно, как запущен игровой сервер - стандартным механизмом развёртывания или через встраивание. Корректно настроенный сервер создаёт один или несколько коннекторов, принимающих входящие подключения, пул потоков исполнения и самостоятельно дёргает (нужные) методы вашего приложения. И вообще - делает массу вещей, о которых вам уже не надо думать. В общем, читайте документацию и руководства по Servlet API - там всё расписано. 2. Если обработка принимаемых вами запросов требует работы с HTML, то, как вы уже заметили, работать через сервлеты не очень удобно. По логике, на этом шаге вы должны узнать о CSS, т.к. он позволяет несколько унифицировать генерацию HTML. Вы, опять-таки, можете самостоятельно изобрести полезный велосипед или воспользоваться, например, JSP. 3. При работе с JSP вы (опять) обнаружите, что "не очень удобно" и, вероятно, найдёте JSTL и прочие "библиотеки тэгов". Очень вероятно, что рано или поздно вы узнаете, что "браузер умеет много гитик" и (более-менее) плавно добавите в арсенал своих средств JavaScript и основанные на нём библиотеки. Поэтому вопрос: что делает HTML в вашем игровом сервере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 08:19 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Html моя фронтендная часть. Получается так: Здесь класс HelloHandler это фронтенд. Сразу прошу извинить - я конечно недостаточно хорошо изучил jetty , но все-таки: Этот фронтенд запущен в отдельном потоке и помимо отрисовки Html должен еще и в методе run взаимодействовать с другими частями сервера. А так как он extends AbstractHandler, то может отрисовывать html только так: Код: java 1. А я хотел бы что бы он работал как контроллер, то есть принимал запросы с jsp и на основании этого посылал всякие сообщения в методе run. Только вот единственно, контроллер это сервлет а, сервлет нельзя имплементить от Runnable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 08:40 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Внесу еще чуточку ясности. В идеале я хотел бы что бы этот сервлет был WebSocketServlet и обменивался сообщения с jsp страничкой с помощью javascript(что бы не перезагружать страничку). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 08:52 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Ещё раз: читайте Servlet API. Сервлет не должен "имплементировать Runnable" по той простой причине, что вы не управляете созданием и исполнением потоков. Вообще и никак. Хотите управлять - отложите Jetty и делайте собственный servlet-/jsp-контейнер. Хотя бы - выбросьте встраиваемый Jetty. Просто для того, чтобы не мешать в одну кучу развёртывание сервера с приложениями и работу (уже развёрнутого) приложения. Непонятно зачем вы вообще полезли в обработчики контекстов, если по смыслу это уже веб-приложение или его часть. Вообще, с моей кочки зрения, выходить за пределы Servlet API надо тогда и только тогда, когда вы уже точно определись с целевым контейнером. И его преимущества настолько весомы, что допускают жёсткую привязку к (именно) его API. Нужны вебсокеты - изучаете их API. P.S. Не понимаю, как можно лезть что-то делать вообще не представляя как это устроено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 10:45 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Если вам требуется где-то запускать "другие части" можно: 1. Просто развернуть несколько приложений или несколько сервлетов в рамках одного приложения; 2. Создать произвольные классы, реализующие интерфейс Runnable и самостоятельно их стартовать там, где и положено - в методе init(); 3. Сделать обычное приложение-загрузчик, которое будет стартовать и веб-сервер и "другие части". Можно, наверное и как-нибудь ещё извратиться, но эти три варианта - самое простое, что можно придумать и упорядочены они по возрастанию сложности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 10:54 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Вообще, с моей кочки зрения, выходить за пределы Servlet API надо тогда и только тогда, когда вы уже точно определись с целевым контейнером. И его преимущества настолько весомы, что допускают жёсткую привязку к (именно) его API. Нужны вебсокеты - изучаете их API. Здесь полностью согласен. Просто развернуть несколько приложений или несколько сервлетов в рамках одного приложения - вот этот вариант подойдет, правда еще надо продумать как они будут "общаться". Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 11:15 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Т.к. мы работаем в рамках одной JVM, можно просто дергать в сервлете нужные (целевые) методы нужных классов. Исполнение будет делаться "в потоке" самого сервлета. А эти потоки сервлет-контейнер создаёт "по мере надобности в рамках ограничений". Это если не нужна асинхронность или "многоходовки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 11:26 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
А так можно делать если нужный класс имплементит Runnable? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 11:43 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Дался вам этот Runnable ... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. При этом выкрутас в init() требуется только потому, что SomeServer со всеми своими причиндалами - совершенно отдельное приложение, которое, естественно, нигде и ничего не наследует от Servlet, а значит сервлет-контейнер просто "не умеет" его загружать. При этом сервлет-контейнер гарантирует, что метод init() будет обязательно вызван, что это произойдёт один раз и будет сделано до того, как потребуется вызвать метод service(). Если вы делаете несколько сервлетов, то обязательные части их интерфейса вы дополняете любыми методами, которые вам нужны. При этом вам не требуется заботится о потоках, т.к. поток исполнения будет "предоставлен" тем, кто вызовет метод. А у вызывающего такой поток, естественно, есть. Даже если не он сам его создавал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 12:19 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Кстати, "будьте проще и люди к вам потянутся" Если ваши дополнительные методы не требуют специальной инициализации, их не надо оформлять ни в какие сервлеты. Просто вызывайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 12:38 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
Вот спасибочки! Понадобилось время чтобы осознать код. Вы мне очень помогли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 13:00 |
|
||
|
Клиент игрового веб-сервера
|
|||
|---|---|---|---|
|
#18+
aleapv, поставь tomcat7(8) там есть пример как использовать websockets можешь использовать https://github.com/TooTallNate/Java-WebSocket ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 16:05 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38691641&tid=2126921]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 527ms |

| 0 / 0 |
