8

私は最近 heroku.com サイトにアクセスし、最初の Java プログラムをそこにデプロイしようとしましたが、実際に Java デプロイ チュートリアルを使用して良いスタートを切り、問題なく実行できました。今、私はそこにデプロイする必要があるサーバーコードを持っています。例に従おうとしましたが、次のような質問がありました。

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に従って、サーバー コードをアップロードしました。他に何かする必要がありますか?!

前もって感謝します

4

1 に答える 1

6

Heroku では、アプリケーションは $PORT 環境変数で指定された HTTP ポートにバインドする必要があります。このことから、上記のアプリケーション コードの 2 つの主な問題は、1) ハードコーディングされたポート ( 6780) にバインドしていることと、2) アプリケーションが HTTP ではなく TCP を使用していることです。チュートリアルに示されているように、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();   
    }
}
于 2013-05-16T06:02:14.633 に答える