在哪个 IP 上托管 http 服务器? (Heroku,没有框架)
Posted
技术标签:
【中文标题】在哪个 IP 上托管 http 服务器? (Heroku,没有框架)【英文标题】:On which IP to host an http server? (Heroku, no frameworks) 【发布时间】:2022-01-14 10:56:35 【问题描述】:我可以在 heroku 上的哪个 IP 上托管我的 http 服务器(纯 java)? Heroku 为 web 应用提供的应用的 IP 是否合适?如果是,那么如果需要,请帮我设置 Procfile。
我的 Procfile:worker: java -jar (name of jar file).jar
我的 1-class 代码:
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 ->
if(httpExchange.getRequestMethod().equals("GET"))
String out = "<head><meta charset=\"UTF-8\"></head>\n" +
"<h1>Params:</h1>" +
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 Map<String, List<String>> splitQuery(String query)
if (query == null || "".equals(query))
return Collections.emptyMap();
return Pattern.compile("&").splitAsStream(query)
.map(s -> Arrays.copyOf(s.split("="), 2))
.collect(groupingBy(s -> decode(s[0]), mapping(s -> 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,它启动了,但不清楚向哪个地址发出请求
端口由环境变量“PORT”决定
【问题讨论】:
我不明白。您认为 IP 地址在哪些方面可能不合适? 它可以是动态的,所以它可以与前面提到的procfile一起使用,还是只用于web应用程序? 是的,Heroku IP 地址是动态的。但许多网络托管服务提供商都是如此。它不会阻止您使用它们。您只需要正确设置 DNS。 Heroku 用于很多 网络应用程序。基本上就是这样。 ...我不需要绑定域,我需要打开一个HttpServer并在其中指定一个IP地址,动态不接受 请显示您正在执行此操作的代码。我怀疑您在侦听连接和测功机的公共 IP 地址之间感到困惑。 【参考方案1】:已经找到了解决办法,但我还是会写: 将 ip 设置为 0.0.0.0 并将端口设置为 PORT 环境变量,在 procfile 中将其设置为 web,它应该可以工作
【讨论】:
以上是关于在哪个 IP 上托管 http 服务器? (Heroku,没有框架)的主要内容,如果未能解决你的问题,请参考以下文章
哪个引擎可以在 Google Cloud 上托管 perforce 服务器?
如何在具有不同域的同一 IP/服务器上托管多个 Node.js 站点?
在一个 IP 上托管多个 Golang 站点并根据域请求提供服务?