2013-05-15 4 views
5

पर सरल सर्वर कोड परिनियोजित करें मैंने हाल ही में heroku.com साइट पर जाकर वहां अपना पहला जावा प्रोग्राम तैनात करने की कोशिश की, वास्तव में मेरे जावा तैनाती ट्यूटोरियल का उपयोग करके अच्छी शुरुआत हुई, और यह ठीक चला गया। अब मेरे पास एक सर्वर कोड है जिसे मुझे तैनात करने की आवश्यकता है, मैंने उदाहरण का पालन करने की कोशिश की लेकिन मुझे कुछ सवाल था जैसेहरोकू

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

मैं इस ट्यूटोरियल का पालन किया है +०१२३७२२५२३५अपनी साइट पर अपना सर्वर कोड अपलोड करने के लिए कुछ और करने की ज़रूरत है? अग्रिम

उत्तर

5

Heroku पर में

धन्यवाद, आपके आवेदन bind to the HTTP port provided in the $PORT environment variable चाहिए। यह देखते हुए, उपर्युक्त आपके आवेदन कोड में दो प्रमुख समस्याएं हैं 1) आप एक हार्डकोडेड पोर्ट (6780) और 2) के लिए बाध्यकारी हैं। आपका एप्लिकेशन HTTP के बजाय टीसीपी का उपयोग कर रहा है। के रूप में 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 कनेक्शन हो जाएगा मामला?! यह वास्तव में काफी सरल उदाहरण है, जो मैं वास्तव में कर रहा हूं वह मल्टीप्लेयर गेम का निर्माण कर रहा है जहां ग्राहक सर्वर से कनेक्ट हो सकते हैं और खेल सकते हैं इसलिए सर्वर कोड में आपके बदलाव के बाद मुझे आपके क्लाइंट कोड के बारे में दिलचस्पी है। कृपया याद रखें कि मैं मल्टीप्लेयर का समर्थन करने के लिए कोड का विस्तार करने का इरादा रखता हूं इसलिए किसी भी मदद की सराहना की जाएगी –

+0

हां, आपके क्लाइंट को भी HTTP का उपयोग करने की आवश्यकता होगी। हेरोकू अनुप्रयोग आउटबाउंड टीसीपी कनेक्शन (उदाहरण के लिए डेटाबेस) कर सकते हैं, लेकिन सभी इनबाउंड कनेक्शन HTTP से अधिक होने की आवश्यकता है। अधिक जानकारी के लिए [Heroku HTTP रूटिंग के बारे में जानकारी] (https://devcenter.heroku.com/articles/http-routing) देखें। – ryanbrainard

संबंधित मुद्दे