簡體   English   中英

如何在Docker中連接2個Java Websocket服務器應用程序?

[英]How do I connect 2 Java websocket server applications in Docker?

我有2個通過本地主機端口81連接的Java Spring Boot應用程序。代碼可以在Eclipse中正常工作。 當我使用docker時,我嘗試公開端口,但失敗。 我無法在2個單獨的docker終端中使docker映像相互連接。

服務器代碼:

public static void main(String[] args) {
        SpringApplication.run(SpringGetApplication.class, args);
        try {
            final int portNumber = 81;
            ServerSocket serverSocket = new ServerSocket(portNumber);

            while (true) {
                // SOCKET MESSAGE SENDER
                // SOCKET SENDS MESSAGE THEN CLOSES
                Socket socket = serverSocket.accept();
                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os, true);

                // PW, PRINTWRITER SENDS STRINGS TO OTHER SERVER
                pw.println("Hello");

                // BUFFEREDREADER READS OTHER SERVER'S MESSAGES
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                // WHILE LOOP TO KEEP READING LINE WHEN THE INPUTS ARE COMING
                String answer = null;
                while ((answer = br.readLine()) != null) {
                    System.out.println(answer);
                }

                pw.println("I HAVE SUCCESSFULLY RECIEVED YOUR DATA");
                pw.close();
                br.close();
            }
        } catch (Exception e) {     }
    }

客戶端代碼:

public static void main(String[] args) {
        SpringApplication.run(SpringGetApplication.class, args);

        try {
            final String host = "localhost";
            final int portNumber = 81;

            System.out.println("Creating server socket on port " + portNumber);
            Socket socket = new Socket(host, portNumber);

            // READS RESPONSE FROM THE SERVER
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // PRINTWRITER USES SOCKET OUTPUT TO SEND THE DATA OUT TO THE OTHER SERVER
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            System.out.println("server says:" + br.readLine());

            String outputTextToCC = "HOWDY THERE, i'M THE CLIENT";
            // OUT SENDS THE STRING TO THE OTHER SERVER
            out.println(outputTextToCC);
            out.println("FINISH");

            // READS RESPONSE FROM OTHER SERVER
            System.out.println("server says:" + br.readLine());
            br.close();
            socket.close();

        } catch (Exception e) {     }
    }

我為它們都創建了Docker映像,並在單獨的Docker終端上運行了這兩個映像。

  • 終端1(我的服務器應用程序): docker run --expose=81 contactcentre2
  • 終端2(我的客戶端應用): docker run --expose=81 contactcentretest

在此處輸入圖片說明

我嘗試公開端口81,但是我的客戶端應用程序仍然無法連接到其他服務器。

在容器內部,您的應用程序不知道什么是“ localhost”。

如果您使用網絡IP,它將起作用。 更好的是,使用docker網絡或撰寫:

https://docs.docker.com/v17.09/engine/userguide/networking/#the-default-bridge-network

https://docs.docker.com/compose/

您將在此處找到一個示例: https//docs.docker.com/compose/overview/

最后是這樣的:

version: '3'
services:
  server:
    image: server-img
    ports:
    - "81:81"
  client:
    image: client-img
    links:
    - server

然后,將“ localhost”替換為“ server”。

PS:您不需要從客戶端公開端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM