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