Как настроить сервер netty-SocketIO так, чтобы он был доступен для всех удаленных клиентов java в jelastic - PullRequest
0 голосов
/ 07 августа 2020

Я разрабатываю проект Spring-Boot, который также включает сервер socketIO, основанный на netty-socket Io. И поэтому два клиента: веб-клиент и клиент android! все они прекрасно работают локально! Но когда я развертываю онлайн-сервер в Jelasti, c только веб-клиент, который обращается к серверу netty-SocketIO, но клиент android не может подключиться к серверу netty-SocketIO. кто-то может помочь мне настроить сервер netty-socketIO для приема всех запросов с любого адреса на порт 8888

Конфигурация сервера

Configuration config = new Configuration();

        //config.setHostname("sec.j.layershift.co.uk");
        config.setHostname("0.0.0.0");
        config.setPort(8888);


        final SocketIOServer server = new SocketIOServer(config);


        // Listen for client connections
        server.addConnectListener(client -> {
            System.out.println("************ Client: " + getIpByClient(client) + " Connected ************");


        });

Конфигурация веб-клиента

@CrossOrigin("*")
@RestController
public class ClientLocation {

    Socket socket =null;
    EventBuilder eventBuilder =null;
    Gson gs =  new Gson();
    //................................


socket = IO.socket("http://sec.j.layershift.co.uk:8888");
            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

                @Override
                public void call(Object... args) {

                    ChatObject co = new ChatObject("ADMIN", "");
                    String infUser = gs.toJson(co);
                    System.out.println("\n"+infUser);
                    JSONObject jb =  new JSONObject();
                    try {

//                      jb.put("userName", co.getUserName());
//                      jb.put("message", co.getMessage());

                        jb =  new JSONObject(infUser);
                        socket.emit("username", jb);
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

Конфигурация клиента java или android

private void clientIO(){

        try {
            socket = IO.socket("http://aug-sec.j.layershift.co.uk:8888");
            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

Nb. Конфигурация клиента java или android идентична конфигурации веб-клиента, поскольку все они используют Socket.IO v1.0.0. Но только веб-клиент работает с хоста Jelasti c, потому что он находится в той же папке, что и сервер, и клиенты java не работают, поэтому все работает на localhost или в LAN

1 Ответ

0 голосов
/ 11 августа 2020

Есть 2 возможных решения

  1. Вы можете использовать publi c IP (способ, предложенный @Ruslan)
  2. Кроме того, распознаватель платформы Jelasti c поддерживает проксирование WebSocket (если присутствует заголовок «Upgrade: websocket»). Вы можете использовать переменную JELASTIC_EXPOSE для перенаправления запросов с порта 80 на 8888 (подробнее здесь https://docs.jelastic.com/container-ports/#ports -auto-redirect ) внутри вашего контейнера, а затем просто получить доступ к приложению через домен вашей среды и порт 80
...