2013-05-15 9 views
5

Niedawno odwiedziłem stronę heroku.com i próbowałem wdrożyć mój pierwszy program java, faktycznie miałem dobry start, korzystając z samouczka poświęconego wdrażaniu java, i miałem je uruchomione. teraz mam kod serwera, który muszę zainstalować, próbowałem postępować zgodnie z przykładem, ale miałem pewne pytanie na uwadze, jak,Wdrożenie prostego kodu serwera do Heroku

1 - co będzie gospodarzem w tym przypadku, próbowałem już link do aplikacji jako jeśli jego gospodarz, ale rzuca błędy,

tutaj jest mój przykładowy kod serwera

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(); 
     } 
    } 
} 

tutaj jest mój kod klienta

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); 
    } 
} 

Śledziłem ten poradnik https://devcenter.heroku.com/articles/java na swojej stronie, aby przesłać mój kod serwera, czy jest coś jeszcze, co muszę zrobić?!

góry dzięki

Odpowiedz

5

Na Heroku, aplikacja musi bind to the HTTP port provided in the $PORT environment variable. Biorąc to pod uwagę, dwa główne problemy w powyższym kodzie aplikacji to: 1) połączenie z zakodowanym na stałe portem (6780) i 2) aplikacja używa protokołu TCP zamiast HTTP. Jak pokazano w tutorial użyć czegoś podobnego Jetty osiągnąć równowartość HTTP aplikacji i korzystać System.getenv("PORT") wiązać się z odpowiednim porcie, tak:

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

ok, ale będzie kod klienta normalne połączenie http w ten walizka?! to naprawdę dość prosty przykład, co tak naprawdę robię to budowanie gry dla wielu graczy, w której klienci mogą łączyć się z serwerem i grać, więc jestem zainteresowany kodem klienta po zmianie kodu serwera z góry dziękuję? pamiętajcie, że zamierzam rozszerzyć kod na obsługę multiplayera, więc każda pomoc byłaby doceniana. –

+0

Tak, twój klient również musiałby używać HTTP. Aplikacje Heroku mogą tworzyć wychodzące połączenia TCP (np. Do bazy danych), ale wszystkie połączenia przychodzące muszą być za pośrednictwem protokołu HTTP. Więcej informacji można znaleźć w [info o routingu HTTP Heroku] (https://devcenter.heroku.com/articles/http-routing). – ryanbrainard

Powiązane problemy