io.socket: socket.io-client: 1.0.0 и com.github.nkzawa: socket.io-client: 0.6.0 - PullRequest
0 голосов
/ 05 августа 2020

В android Studio, пытаясь подключиться к серверу с помощью socket.io, сначала использовал io.socket: socket.io-client: 1.0.0, все идет хорошо, я подключаюсь к серверу, отправляю и получаю данные без каких-либо ограничений, просто сокет был нестабильным и каждые несколько секунд он повторно подключается к серверу с аутентификацией, и socket.id был изменен, несмотря на это (большая проблема - только в android не браузере) я использую код для одного проекта. В новом проекте я попытался решить эту проблему, поэтому использовал com.github.nkzawa: socket.io-client: 0.6.0 и мне удалось установить стабильное соединение, которое аутентифицируется и остается подключенным. Единственным изменением было добавление золотой опции "options.path =" /socket.io ";". Но не удалось отправить команду «init», не получить ответа от сервера, поэтому я изменил ключевое слово на «rtl_init» и работал. Затем я обнаружил, что он также не получает ответа на «errMessage», поскольку в ответе существуют такие ключи содержимого, как «err_code» или «err_msg». Вот мой основной код:

package com.nilufari.keshmesh.game.utils;

import android.util.Log;
import java.net.URI;
import java.net.URISyntaxException;

import io.socket.client.IO;
import io.socket.client.Manager;
//import com.github.nkzawa.socketio.client.IO;
//import com.github.nkzawa.socketio.client.Manager;

public class Socket {
    private static final String TAG = Socket.class.getSimpleName();
    private static final String SOCKET_PATH = "/socket.io";
    private static io.socket.client.Socket instance;
//    private static com.github.nkzawa.socketio.client.Socket instance;
    public static Manager mManager;

//    public static com.github.nkzawa.socketio.client.Socket getInstance() {
    public static io.socket.client.Socket getInstance() {
        if (instance == null) {
            try {
                final IO.Options options = new IO.Options();
                options.path = SOCKET_PATH;
                mManager = new Manager(new URI(Constants.BASE_URL), options);
                instance = mManager.socket("/");

            } catch (final URISyntaxException e) {
                Log.e(TAG, e.toString());
            }
        }
        return instance;
    }
}

И используется так:

@Override
public void onCreate() {
    IntentFilter filter = new IntentFilter();
    registerReceiver(receiver, filter);
    mSocket = Socket.getInstance();
    mSocket .on(mSocket.EVENT_CONNECT, onConnect)
            .on(mSocket.EVENT_RECONNECTING, onReconnect)
            .on(mSocket.EVENT_DISCONNECT, onDisconnect)
            .on(mSocket.EVENT_CONNECT_TIMEOUT, onConnectTimeOut)
            .on(mSocket.EVENT_CONNECT_ERROR, onConnectError)
            .on(mSocket.EVENT_ERROR, onError)
            .on("errMessage", onErrorMessageSocket)
            .on("game", onGame)
            .on("said", onSaid)
            .on("file", onFile)
            .on("login", onLogin);
    mSocket.connect();
    mSocketGame = mManager.socket("/game");
    mSocketGame.connect();
}

пожалуйста, помогите мне узнать, что не так.

Отредактировано: Я изменил конфигурацию Nginx следующим образом, проблема решена, но все же приветствую любые объяснения.

server {
  listen       80;
  root /var/www/app_rtp_mywebaddress/;
  
  location /public/uploads/ {
    alias /var/www/app_rtp_mywebaddress/public/uploads/;
  }

  server_name  rtp.mywebaddress.com;
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";   
    proxy_pass http://localhost:2042; 
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...