2013-05-15 4 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); 
    } 
} 

내 클라이언트 코드 내 샘플 서버 코드입니다그들의 사이트에서 내 서버 코드를 업로드하려면이 필요합니다. Heroku가에 사전

답변

5

에서

덕분에, 응용 프로그램은 bind to the HTTP port provided in the $PORT environment variable을해야합니다. 위에서 설명한 응용 프로그램 코드의 두 가지 주요 문제점은 1) 하드 코드 된 포트 (6780)에 바인딩하고 2) 응용 프로그램이 HTTP 대신 TCP를 사용하고 있다는 것입니다. tutorial에 나타낸 바와 같이, 응용 프로그램의 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를 통해 이루어져야합니다. 자세한 내용은 [Heroku HTTP 라우팅 정보] (https://devcenter.heroku.com/articles/http-routing)를 참조하십시오. – ryanbrainard