Как развернуть и получить доступ к конечной точке Java WebSocket на Heroku без каких-либо дополнительных фреймворков

Я следил за этим очень простым руководством по настройке конечной точки WebSocket на Java: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/HomeWebsocket/WebsocketHome.html

Однако Heroku ожидает, что я буду полагаться на Play Framework: https://devcenter.heroku.com/articles/play-java-websockets

У меня вопрос: как я могу развернуть то же самое без каких-либо дополнительных фреймворков и какую процедуру мне нужно пройти, чтобы все заработало?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
0
795
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Heroku не требует, чтобы платформа Play использовала Websockets. Это всего лишь пример. Пока ваше приложение из учебника Oracle связывается с $PORT, оно должно работать.

Взглянув на stackoverflow.com/questions/36751071/…, мне кажется, что мне также нужно привязать хост к 0.0.0.0. Это верно?

coderodde 15.04.2018 18:02

Не могли бы вы предоставить ссылку на ресурс, описывающий процесс привязки к 0.0.0.0? Я просто не могу найти ничего подходящего по этой теме.

coderodde 16.04.2018 17:23

Я назначил награду. Вам может быть интересно.

coderodde 18.04.2018 17:29

Можете ли вы запустить пример Oracle из командной строки (то есть не в IDE)?

codefinger 18.04.2018 17:34

Я понятия не имею, как это сделать.

coderodde 18.04.2018 17:47

У вас есть файл WAR, созданный IDE?

codefinger 18.04.2018 17:49

Да, файл WAR существует, и я знаю, в какой папке он находится.

coderodde 18.04.2018 18:01

Попробуйте развернуть его на heroku с помощью heroku plugins:install heroku-cli-deploy, а затем heroku deploy:war yourapp.war

codefinger 18.04.2018 18:05

Позвольте нам продолжить обсуждение в чате.

coderodde 18.04.2018 18:08
Ответ принят как подходящий

У вас была такая проблема:

Учебное пособие, которому вы следовали, было создано для сервера приложений GlassFish, но Heroku поддерживает только Tomcat 8 и Jetty. Смотрите здесь: https://devcenter.heroku.com/articles/war-deployment

Но не волнуйтесь, я портировал и протестировал руководство для работы с Tomcat 8.

Я также добавил стеклянную реализацию спецификации javax.json. (Убедитесь, что вы загрузили реализацию, а не только интерфейсы спецификации) Вы можете найти его здесь: http://central.maven.org/maven2/org/glassfish/javax.json/1.0.4/

Я также заметил, почему, возможно, ваш index.html не работает локально: я думаю, это потому, что URL-адрес WebSocket был жестко закодирован в файле websocket.js. Я взял на себя смелость исправить это, сделав его динамическим.

Вот полный проект NetBeans 8.0.2:
http://ray.hulha.net/WebsocketHome.zip

Вот лучший способ создать файл войны из NetBeans 7 или 8:

Однако есть одна загвоздка: в Tomcat 8 на Heroku отсутствует надстройка websocket.

Но не беспокойтесь, вы можете добавить его вручную в файл войны. Вот шаги:

  1. Загрузите надстройку Tomcat websocket здесь:
    http://central.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/8.0.29/tomcat-embed-websocket-8.0.29.jar

  2. Военный файл на самом деле представляет собой просто zip-архив. Поэтому я использовал 7-молния, чтобы открыть файл войны. Затем перейдите в папку WEB-INF / lib внутри файла war.

  3. Скопируйте банку в войну. Перетащите tomcat-embed-websocket-8.0.29.jar в папку lib файла war внутри 7-Zip.

  4. Z-Zip спросит, действительно ли вы хотите скопировать jar в файл war. Скажи да.

Вот скомпилированный файл войны с tomcat-embed-websocket-8.0.29.jar, готовый к развертыванию на Heroku: http://ray.hulha.net/WebsocketHome.war

Я использовал эту команду для его развертывания:

heroku war:deploy WebsocketHome.war --app websockethome

Обязательно замените имя приложения в конце на имя вашего приложения.

И вот рабочий результат: http://websockethome.herokuapp.com/

Также кажется, что бегун веб-приложений на Heroku не поддерживает веб-сокеты. Посмотрите, как это работает: stackoverflow.com/questions/43170817/…

Ray Hulha 24.04.2018 16:16

Не получилось как положено. Я попытался собрать ваш проект и развернуть полученную WAR на Heroku. Затем я развернул файл WAR ваш. Ни один из двоих не справился со своей задачей.

coderodde 24.04.2018 16:56

Все заработало! Вам нужно скопировать tomcat-embed-websocket-8.0.29.jar в файл war. Военный файл - это просто zip-архив. Я использовал 7-ZIP. Внутри файла WAR вы должны зайти в папку WEB-INF / lib. Скопируйте банку в эту папку. Я загрузил tomcat-embed-websocket-8.0.29.jar отсюда: central.maven.org/maven2/org/apache/tomcat/embed/… Я также обновил военный файл на своем сервере. Вот рабочая демонстрация: websockethome.herokuapp.com/#

Ray Hulha 25.04.2018 15:50

К своему ответу я добавил подробные инструкции по всему.

Ray Hulha 25.04.2018 16:02

Спасибо за уделенное время, Рэй! Я проверю / проверю ваш ответ завтра.

coderodde 25.04.2018 21:19

Мы приближаемся, но, увы, когда я перестраиваю и повторно развертываю свою версию (с tomcat-emded-websocket-8.0.29 в WEB-INF \ lib), Heroku показывает мне свою страницу «Ошибка приложения», если я пытаюсь получить доступ к ее (фиктивный) index.html. Другими словами, развертывание работает, все остальное - нет.

coderodde 26.04.2018 11:38

Ты в скайпе ?

Ray Hulha 26.04.2018 14:39

Я. Когда вы доступны?

coderodde 26.04.2018 14:57

На моем компьютере нет микрофона.

coderodde 26.04.2018 16:16

Раймонд, не забудьте упомянуть, что нужно добавить JAR-библиотеку JSON.

coderodde 29.04.2018 15:47

Другие вопросы по теме