#java #http #heroku #ip
#Ява #http #героку #ip
Вопрос:
На каком IP-адресе я могу разместить свой http-сервер (чистая java) на heroku? Подойдет ли IP-адрес приложения, которое Heroku предоставляет для веб-приложений? Если да, то при необходимости помогите мне настроить Procfile.
Мой Файл Процесса: worker: java -jar (name of jar file).jar
Мой код 1-го класса:
package discord.wosaj; import com.sun.net.httpserver.HttpServer; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; import java.net.URLDecoder; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import static java.util.stream.Collectors.*; public class Main { public static void main(String[] args) throws IOException { HttpServer server = HttpServer.create(new InetSocketAddress("https://rests-server.herokuapp.com", 80), 0); server.createContext("/api/hello", httpExchange -gt; { if(httpExchange.getRequestMethod().equals("GET")) { String out = "lt;headgt;lt;meta charset="UTF-8"gt;lt;/headgt;n" "lt;h1gt;Params:lt;/h1gt;" Main.splitQuery(httpExchange.getRequestURI().getRawQuery()); httpExchange.sendResponseHeaders(200, out.getBytes().length); OutputStream stream = httpExchange.getResponseBody(); stream.write(out.getBytes()); stream.flush(); stream.close(); } else { httpExchange.sendResponseHeaders(405, -1); } }); server.setExecutor(null); server.start(); } public static Maplt;String, Listlt;Stringgt;gt; splitQuery(String query) { if (query == null || "".equals(query)) { return Collections.emptyMap(); } return Pattern.compile("amp;").splitAsStream(query) .map(s -gt; Arrays.copyOf(s.split("="), 2)) .collect(groupingBy(s -gt; decode(s[0]), mapping(s -gt; decode(s[1]), toList()))); } private static String decode(final String encoded) { try { return encoded == null ? null : URLDecoder.decode(encoded, "UTF-8"); } catch (final UnsupportedEncodingException e) { throw new RuntimeException("UTF-8 is a required encoding", e); } } }
Я попробовал 0.0.0.0, он запускается, но непонятно, на какой адрес делать запросы
порт определяется переменной среды «ПОРТ».
Комментарии:
1. Я не понимаю. Каким образом, по вашему мнению, IP-адрес может быть неподходящим?
2. он может быть динамическим, поэтому его можно использовать с вышеупомянутым procfile, или он предназначен только для веб-приложений?
3. Да, IP-адреса Heroku являются динамическими. Но это верно для многих провайдеров веб — хостинга. Это не мешает вам их использовать. Вам просто нужно правильно настроить DNS. Heroku используется для множества веб-приложений. Это в основном все, что он делает.
4. … Мне не нужно привязывать домен, мне нужно открыть HTTPServer и указать в нем IP-адрес, dynamic не принимает
5. Пожалуйста, покажите код, где вы это делаете. Я подозреваю, что вы путаетесь между прослушиванием соединений и общедоступным IP-адресом вашего dyno.
Ответ №1:
Решение найдено, но я все равно напишу: установите ip на 0.0.0.0, а порт на переменную среды PORT, установите ее как web в файле procfile, она должна работать