http-сервер работает локально с 'heroku local web', но не в облаке heroku. Я всегда получаю сообщение об ошибке: code = H18 desc = Метод запроса сервера прерван = GET
Вот класс, это в основном сервер hello world. Не так много может пойти не так здесь:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Optional;
public class Server {
public static void main(String[] args) throws Exception {
int port = Integer.parseInt(Optional.ofNullable(System.getenv("PORT")).orElse("8080"));
System.out.println("Server started: http://localhost:" + port);
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("client connected: " + socket);
new Thread(new ClientConnector(socket)).start();
}
}
public static class ClientConnector implements Runnable {
Socket socket;
ClientConnector(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());
PrintWriter printwriter = new PrintWriter(os);
// Read request
String line = reader.readLine();
while (line != null && !line.isEmpty()) {
System.out.println("< " + line);
line = reader.readLine();
}
// print response
String response = "HTTP/1.1 200 OK\n"
+ "Content-Type: text/html\n"
+ "Content-Length: 11\n"
+ "\n"
+ "hello world";
printwriter.println(response);
System.out.println("sent response");
os.flush();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Вот полный пример журнала, запрос прочитан и ответ отправлен:
:00 heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/" host=hidden-brook-63920.herokuapp.com request_id=936ffe14-adc2-4773-966e-44b1ce4b60d0 fwd="202.58.193.226" dyno=web.1 connect=0ms service=2ms status=503 bytes=72 protocol=https
app[web.1]: client connected: Socket[addr=/10.41.207.114,port=17962,localport=9405]
app[web.1]: < GET / HTTP/1.1
app[web.1]: < Host: hidden-brook-63920.herokuapp.com
app[web.1]: < Connection: close
app[web.1]: < Cache-Control: max-age=0
app[web.1]: < Upgrade-Insecure-Requests: 1
app[web.1]: < Total-Route-Time: 0
app[web.1]: sent response