2013-05-15 2 views
5

Недавно я посетил сайт heroku.com и попытался развернуть мою первую программу Java, я действительно хорошо начал использовать учебник по развертыванию Java, и если бы он работал нормально. теперь у меня есть код сервера, который мне нужно развернуть там, я попытался следовать примеру, но у меня был некоторый вопрос, например:Разверните простой серверный код на Heroku

1- какой будет хост в этом случае, я уже пробовал ссылку на приложение как если его хозяин, но он бросает ошибки,

вот мой код сервера образец

public class DateServer { 

    /** Runs the server. */ 
    public static void main(String[] args) throws IOException { 
     ServerSocket listener = new ServerSocket(6780); 
     try { 
      while (true) { 
       Socket socket = listener.accept(); 
       try { 
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
        out.println(new Date().toString()); 
       } finally { 
        socket.close(); 
       } 
      } 
     } finally { 
      listener.close(); 
     } 
    } 
} 

вот мой код клиента

public class DateClient { 

    /** Runs the client as an application. First it displays a dialog box asking for the IP address or hostname of a host running the date server, then connects to it and displays the date that it serves. */ 
    public static void main(String[] args) throws IOException { 
     //I used my serverAddress is my external ip address 
     Socket s = new Socket(serverAddress, 6780); 
     BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); 
     String answer = input.readLine(); 
     JOptionPane.showMessageDialog(null, answer); 
     System.exit(0); 
    } 
} 

Я после этого учебника https://devcenter.heroku.com/articles/java на своем сайте для загрузки моего кода сервера есть что-то еще, что мне нужно сделать?!

заранее спасибо

ответ

5

На Heroku, ваше приложение должно bind to the HTTP port provided in the $PORT environment variable. Учитывая это, две основные проблемы в коде приложения выше: 1) вы привязываетесь к жесткокодированному порту (6780) и 2) ваше приложение использует TCP вместо HTTP. Как показано в tutorial, использовать что-то вроде Jetty для выполнения HTTP-эквивалент вашего приложения и использовать System.getenv("PORT") привязку к правому порту, как это:

import java.util.Date; 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.*; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.*; 

public class HelloWorld extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
     resp.getWriter().print(new Date().toString()); 
    } 

    public static void main(String[] args) throws Exception{ 
     Server server = new Server(Integer.valueOf(System.getenv("PORT"))); 
     ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     context.setContextPath("/"); 
     server.setHandler(context); 
     context.addServlet(new ServletHolder(new HelloWorld()),"/*"); 
     server.start(); 
     server.join(); 
    } 
} 
+0

нормально, но будет клиентский код нормальное соединение HTTP в этом дело?! это на самом деле довольно простой пример, что я действительно делаю, это создание многопользовательской игры, где клиенты могут подключаться к серверу и играть, поэтому меня интересует код клиента ur после того, как ур изменился в коде сервера, заранее спасибо? пожалуйста, помните, что я намерен расширить код для поддержки многопользовательской игры, поэтому любая помощь будет оценена. –

+0

Да, вашему клиенту также нужно будет использовать HTTP. Приложения Heroku могут выполнять исходящие TCP-соединения (например, в базе данных), но все входящие соединения должны быть за HTTP. Для получения дополнительной информации см. [Информация о маршрутизации HTTP Heroku] (https://devcenter.heroku.com/articles/http-routing). – ryanbrainard

Смежные вопросы